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
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)
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())
....
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