Ik heb samen met iemand de query verder uitgewerkt, maar op een of andere manier wilt die maar 1 resultaat weergeven... hij geeft geen mysql errors weer, maar hij hoort zeker weten wel 2 resultaten te geven, maar door iets wilt hij er maar eentje weergeven.

bij de werkende query had ik nog niet toegevoegd wat ik nog nodig had, maar zodra ik dat toevoegde deed hij dus raar...

sorry als jullie me niet begrijpen, maar ik weet niet hoe ik dit probleem goed uit kan leggen

Werkend:

SELECT	companies.c_id, 
	companies.c_name, 
	companies.rm_id, 
	relationship_managers.rm_id, 
	companies.c_invisibility, 
	relationship_managers.rm_firstname, 
	relationship_managers.rm_surname

						
FROM 	companies
	JOIN relationship_managers ON relationship_managers.rm_id = companies.rm_id 
	JOIN linkbuilding ON linkbuilding.c_id = companies.c_id AND linkbuilding.y_id = YEAR(NOW())
						
WHERE 	c_invisibility = 0
						
ORDER BY 	companies.c_id DESC



Niet werkend:

SELECT	companies.c_id, 
	companies.c_name, 
	companies.rm_id, 
	relationship_managers.rm_id, 
	companies.c_invisibility, 
	relationship_managers.rm_firstname, 
	relationship_managers.rm_surname,

	SUM(l1.y_january) + 
	SUM(l1.y_february) + 
	SUM(l1.y_march) + 
	SUM(l1.y_april) + 
	SUM(l1.y_may) + 
	SUM(l1.y_june) + 
	SUM(l1.y_july) + 
	SUM(l1.y_august) + 
	SUM(l1.y_september) + 
	SUM(l1.y_october) + 
	SUM(l1.y_november) + 
	SUM(l1.y_december) + 
	AS s_totaal

						
FROM 	companies
	JOIN relationship_managers ON relationship_managers.rm_id = companies.rm_id 
	JOIN linkbuilding l1 ON l1.c_id = companies.c_id 
	JOIN linkbuilding l2 ON l2.c_id = companies.c_id AND l2.y_id = YEAR(NOW())
						
WHERE 	c_invisibility = 0
						
ORDER BY 	companies.c_id DESC
Ivo P op 23/04/2014 16:52:26

en waar is die grote query dan?

Anyway:
Die 2e query mist een GROUP BY

http://wiki.pfz.nl/group-by


ligt eraan wat je groot vindt haha
maar hoezo mis ik een group by? die heb ik volgens mij niet eens nodig...
je gebruikt een aggregatie functie (SUM()) en losse kolommen.

Dat vereist dat je group by gebruikt.

Ja, je kunt mysql gebruiken zonder dat er een foutmelding verschijnt, maar zoals ik in dat artikeltje aangeef: dan kun je dus willekeurige info terugkrijgen.(en soms klopt die info, maar dat is dan toeval)
oke bedankt ik ga er morgen naar kijken :)
De oplossing van Ivo is helemaal goed, dat vooropgesteld, ik mis alleen de uitleg. Het geval hier is dat je een SUM gebruikt, helemaal zonder GROUP BY. Zelf denk je dat dat niet nodig hebt, maar dan is het altijd zo dat je maar 1 record terugkrijgt. Alles wordt namelijk op een hoop gegooid om een grote SUM te maken. Zonder GROUP BY krijg je dus nooit het 2e record te zien.
Dit is enigzins anders dan de fout die de meeste mensen maken met GROUP BY (namelijk wel gebruiken, maar dan niet alle kolommen erin zetten).

....
FROM     companies
    JOIN relationship_managers ON relationship_managers.rm_id = companies.rm_id 
    JOIN linkbuilding l1 ON l1.c_id = companies.c_id 
    JOIN linkbuilding l2 ON l2.c_id = companies.c_id AND l2.y_id = YEAR(NOW())
                        
WHERE     c_invisibility = 0

Wat is het nut van die derde join?

...
FROM     companies
    JOIN relationship_managers ON relationship_managers.rm_id = companies.rm_id 
    JOIN linkbuilding l1 ON l1.c_id = companies.c_id 
                        
WHERE     c_invisibility = 0 AND l1.y_id = YEAR(NOW())
Regel 20 een + teveel.
Foutafhandeling inbouwen.
- SanThe - op 23/04/2014 18:53:40

Regel 20 een + teveel.
Foutafhandeling inbouwen.


haha ja klopt had al weg gehaald :)

Toevoeging op 23/04/2014 22:42:48:

Ger van Steenderen op 23/04/2014 18:24:03


....
FROM     companies
    JOIN relationship_managers ON relationship_managers.rm_id = companies.rm_id 
    JOIN linkbuilding l1 ON l1.c_id = companies.c_id 
    JOIN linkbuilding l2 ON l2.c_id = companies.c_id AND l2.y_id = YEAR(NOW())
                        
WHERE     c_invisibility = 0

Wat is het nut van die derde join?

...
FROM     companies
    JOIN relationship_managers ON relationship_managers.rm_id = companies.rm_id 
    JOIN linkbuilding l1 ON l1.c_id = companies.c_id 
                        
WHERE     c_invisibility = 0 AND l1.y_id = YEAR(NOW())



lastig uit te leggen, maar ik doe het even kort:
ik heb een tabel nodig maar moet 2 verschillende opdrachten krijgen, daarom roep ik hem 2 keer op en geef hem andere naam, anders leveren ze problemen met elkaar op.

Toevoeging op 23/04/2014 22:45:16:

Erwin H op 23/04/2014 17:28:13

De oplossing van Ivo is helemaal goed, dat vooropgesteld, ik mis alleen de uitleg. Het geval hier is dat je een SUM gebruikt, helemaal zonder GROUP BY. Zelf denk je dat dat niet nodig hebt, maar dan is het altijd zo dat je maar 1 record terugkrijgt. Alles wordt namelijk op een hoop gegooid om een grote SUM te maken. Zonder GROUP BY krijg je dus nooit het 2e record te zien.
Dit is enigzins anders dan de fout die de meeste mensen maken met GROUP BY (namelijk wel gebruiken, maar dan niet alle kolommen erin zetten).


ty voor de uitleg, dus ik neem aan op het einde van de query GROUP BY s_totaal
Die aliassen begrijp ik, maar je doet helemaal niets met l2.
Ergo, de join op l2 is nutteloos
Racoon smasher op 23/04/2014 22:40:55

ty voor de uitleg, dus ik neem aan op het einde van de query GROUP BY s_totaal

Nee, juist niet op s_totaal. Dat is een aggregate kolom. Je moet juist alle andere kolommen in de GROUP BY hebben.

Reageren