Adverteren?

Je bent hier: Techzine » Forum » Android » [Android] Developers

Mobile - Android

Deel interessante forumberichten met al je vrienden via Twitter, Facebook of LinkedIN!

Discussie: [Android] Developers

Tags: Tags, mét, Opbokken, je

offlineMartijnGP Geplaatst op zondag 3 juli 2011 14:10 1
Ik heb nogal de nijging om de helft van mijn programmeerwerk in queries te doen :) Zo heb ik geregeld queries van tientallen joins, unions, views en meer van dat soort dingen bij elkaar. Dat wil je echt niet in SQLIte.
offlinez-man Geplaatst op zondag 3 juli 2011 21:46 1

Quote:

Op 03-7-2011 14:10 schreef MartijnGP:
Ik heb nogal de nijging om de helft van mijn programmeerwerk in queries te doen :) Zo heb ik geregeld queries van tientallen joins, unions, views en meer van dat soort dingen bij elkaar. Dat wil je echt niet in SQLIte.


Mijn eerste idee is dan gewoon dat er iets mis met je database-ontwerp of je query design? Heb je daar een voorbeeldje van ofzo, want ik kan mij echt niets voorstellen bij een bruikbare query met tientallen joins op een goed ontworpen database :?
offlineMartijnGP Geplaatst op maandag 4 juli 2011 00:15 1

Quote:

Op 03-7-2011 21:46 schreef z-man:
[...]

Mijn eerste idee is dan gewoon dat er iets mis met je database-ontwerp of je query design? Heb je daar een voorbeeldje van ofzo, want ik kan mij echt niets voorstellen bij een bruikbare query met tientallen joins op een goed ontworpen database :?


Even de eerste twee die ik zo kan vinden. Relatief kleine maar in SQLite willen ze sowieso niet.

Code
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
SELECT
	ld.id,
	ld.username,
	ld.firstName,
	ld.lastName,
	CONCAT( ld.firstName, ' ', ld.lastName ) AS fullName,
	ld.email,
	ld.subtitle,
	ld.signedUp,
	ld.inClass,
	cl.yearDiff AS startYear,
	ld.avatarLoc,
	ld.allowed,
	ld.confirmed,
	IF( ld.allowed + ld.confirmed = 2, 1, 0 ) AS active,
	COUNT( lg.userId ) AS sessionCount,
	ld.signature,
	ls.endTime AS lesTo,
	ls.lokaal AS lesIn,
	ls.les AS lesType,
	ls.docent AS lesDocent,
	IF( ISNULL( lg.lastActivity ), ld.signedUp, MAX( lg.lastActivity ) ) AS lastActive,
	TIMEDIFF( NOW(), IF( ISNULL( lg.lastActivity ), ld.signedUp, MAX( lg.lastActivity ) ) ) AS timeInactive,
	lg.ipAdress AS lastIpAdress,
	lg.requestURI AS lastPage,
	IF( RIGHT( lg.hostname, 9 ) = ".avans.nl", 1, 0 ) AS atSchool 
FROM
	leden AS ld
	LEFT JOIN classes AS cl ON
		cl.className = ld.inClass
	LEFT JOIN lessen AS ls ON
		ls.class = ld.inClass AND
		ls.startTime < NOW() AND
		ls.endTime > NOW()
	LEFT JOIN logonSessions AS lg ON
		lg.userId = ld.id
	LEFT JOIN logonSessions AS lg2 ON
		lg2.userId = ld.id AND
		lg2.lastActivity < lg.lastActivity		
GROUP BY id


en

Code
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
SELECT
	tracker.*,
	IF( ISNULL( l.lastID ), 'inactive', IF( l.lastID < tracker.lastReactID, 'unread', 'read' ) ) AS readStatus
FROM
	(
		(SELECT
			'react' AS actionType,
			CONCAT_WS( '::', 'react', a.section, a.entry, id ) AS identifier,
			a.section AS section,
			a.entry AS entry,
			lastAction,
			id AS lastReactID,
			r.message AS lastReactMessage,
			r.posterId AS lastReactPoster,
			GROUP_CONCAT( r.posterId ) AS posters,
			GROUP_CONCAT( r.escapedMessage ) AS messages,
			CONCAT( 
				IF( r.section = 'fotos', ( SELECT storeLocation FROM fotos WHERE id = a.entry LIMIT 1 ), '' ),
				IF( r.section = 'user', ( SELECT avatarLoc FROM leden WHERE id = a.entry LIMIT 1 ), '' ) 
				) AS image, 
			IF( r.section = 'fotos', ( SELECT inAlbum FROM fotos WHERE id = a.entry LIMIT 1 ), NULL ) AS albumID,		
			IF( r.section = 'fotos', ( SELECT name FROM fotoAlbums WHERE id = ( SELECT inAlbum FROM fotos WHERE id = a.entry LIMIT 1 ) LIMIT 1 ), NULL ) AS albumName
		FROM
			recentReactions AS a
			LEFT JOIN ( SELECT *, REPLACE( message, ',', ',' ) as escapedMessage FROM reactions ORDER BY postedOn DESC ) AS r
				ON ( r.section = a.section and r.entry = a.entry )
		GROUP BY r.entry
		ORDER BY lastAction DESC)
	UNION
		(SELECT
			'shout' AS actionType,
			CONCAT( 'shout::0::', id ) AS identifier,
			'shout' AS section,
			'0' AS entry,
			postedOn AS lastAction,
			id AS lastReactID,
			message AS lastReactMessage,
			authorID AS lastReactPoster,
			authorID AS posters,
			message AS messages,
			NULL AS image,
			NULL AS albumID,
			NULL AS albumName
		FROM 
			shouts 
		ORDER BY 
			postedOn DESC
		LIMIT 25) 
	) AS tracker
	LEFT JOIN lastRead AS l ON
		( l.section = tracker.section AND l.entry = tracker.entry AND userID = 11 )
ORDER BY
	lastAction DESC


Database design is naar mijn weten prima met goede keys en genormaliseerd. Overigens ook zeer bruikbaar, vanwege de ver doorgevoerde normalisatie en enorme hoop verschillende gegevens die ik aan elkaar moet koppelen krijg je data overal in je DB. Deze queries zijn meestal overigens opgeslagen in de database als VIEWS of zijn gecached. Voordeel is dat je gewoon meteen de data hebt die je nodig hebt en niet moeilijk hoeft te doen in het script. Ik vind queries over het algemeen wat duidelijker wat betreft data verwerking.


Edit! Eindelijk, heb mijn C2DM Push applicatie goedgekeurd en werkend gekregen! Nu nog even netjes afwerken en dan zal ik hier wel een beta dumpen :)
MartijnGP heeft dit bericht gewijzigd op 05-07-2011 om 19:34
offlineMartijnGP Geplaatst op maandag 11 juli 2011 13:45 1
Verknipte kick: Toch maar even een sneak preview van de app die ik een deze dagen hier ook maar in beta vorm ga dumpen :)

offlinehenkdetrucker-NA1 Geplaatst op maandag 11 juli 2011 15:04 1

Quote:

Op 11-7-2011 13:45 schreef MartijnGP:
Verknipte kick: Toch maar even een sneak preview van de app die ik een deze dagen hier ook maar in beta vorm ga dumpen :)


Heh nice. Zou ons pa leuk vinden ware het niet dat hij geen smartphone heeft :P
Is deze specifiek voor je buurt in te stellen? Of voor je stad o.i.d.?
offlinegamemaster Geplaatst op maandag 11 juli 2011 15:08 1

Quote:

Op 11-7-2011 13:45 schreef MartijnGP:
Verknipte kick: Toch maar even een sneak preview van de app die ik een deze dagen hier ook maar in beta vorm ga dumpen :)



Brandweerspotters (achtige) app? :) Nice
offlineMartijnGP Geplaatst op maandag 11 juli 2011 15:25 1
Beetje een ramptoeristenapp hehe :P

Je krijg via de push service een mededeling als er ergens hulpdiensten worden opgeroepen. Ik ben hem nu en paar dagen aan het testen en mijn ervaring is dat je de notificatie op je telefoon hebt nog voordat de brandweer hier de kazerne uit rijdt. Vaak wel interessant om te weten wat er aan de hand is als je allemaal sirene hoort :)

Quote:

Op 11-7-2011 15:04 schreef henkdetrucker:
[...]
Heh nice. Zou ons pa leuk vinden ware het niet dat hij geen smartphone heeft :P
Is deze specifiek voor je buurt in te stellen? Of voor je stad o.i.d.?


Je krijgt notificaties binnen voor de stad waar je op dat moment in bent. Je kunt ook nog filteren op brandweer, politie, ambulance etc en of je altijd gewaarschuwd wilt worden of alleen als er met spoed (dus licht- en acoustische signalen) wordt uitgerukt.

Momenteel werkt het alleen in Brabant en het zuiden van Gelderland. Beetje lastig, want elke regio hanteert zijn eigen manier van oproepen.
MartijnGP heeft dit bericht gewijzigd op 11-07-2011 om 15:40
offlineWizard Geplaatst op vrijdag 10 februari 2012 14:55 1
Er zijn ook al een aantal C++ compilers beschikbaar voor android.
Maar ik vraag me af of dat al optimaal is.

Om te kunnen reageren op deze discussie dien je geregistreerd te zijn bij Techzine.nl
Klik hier om je te registreren, dit is volledig gratis en is binnen 1 minuut geregeld!

Je bent hier: Techzine » Forum » Android » [Android] Developers