Door
Joni Fleischer
op 29-09-2015 22:20
gewijzigd op 30-09-2015 00:09
3.083 views
Hallo allemaal,
Ik heb de volgende query:
$sql = "
SELECT
r.ID,
r.retour_nr,
c.name,
c.contact,
c.email
FROM
retouren AS r
INNER JOIN
clients AS c
ON c.ID = r.contact
GROUP BY
r.retour_nr
";
Maar dan krijg ik:
Regel: 47
Bestand: /****/returns/returns.php
Foutmelding: SQLSTATE[42000]: Syntax error or access violation: 1055 'fleischer_grund.r.ID' isn't in GROUP BY
Hoe kan ik mijn output laten groupen op r.retour_nr?
Waarom GROUP BY? Je gebruikt nergens een aggregate functie waarbij een GROUP BY nodig zou zijn.
Het gebruiken van een GROUP BY is daarom onzin. Heb je enig idee wat GROUP BY doet in SQL?
Misschien bedoel je ORDER BY ipv GROUP BY?
ORDER BY is om te sorteren (op volgorde van retour_nr te zetten).
GROUP BY is voor groeperen (groepjes van rijen met dezelfde retour_nr als 1 rij laten zien in het resultaat)
Maar bij GROUP BY moet je wel alle velden noemen die geen MIN(), MAX(), COUNT() of SUM() hebben.
Aan een retour nummer kunnen meerdere producten aan vast zitten.
Hebben individuele records van "retouren" mogelijk verschillende contactinformatie?
Anders zou je deze (edit: de contact informatie dus) aan retour_nr op kunnen hangen en in een aparte tabel zetten.
Deze tabel noem je dan bijvoorbeeld "retouren", en de huidige tabel "retouren" zou je dan "retour_items" kunnen noemen ofzo (edit: die vervolgens aan het retournummer gekoppeld zijn).
Je query wordt dan een stukje makkelijker, je kunt dan gewoon de (nieuwe) "retouren" tabel uitlezen.
Je database zou zo opgezet moeten worden dat de vraagstukken die je deze wilt stellen makkelijk beantwoord kunnen worden. Het feit dat dit in jouw geval niet makkelijk gaat geeft aan dat de structuur dat stadium nog niet heeft bereikt.
$sql = "
SELECT
r.retour_nr,
c.name,
c.contact,
c.email
FROM
retouren AS r
INNER JOIN
clients AS c
ON c.ID = r.contact
GROUP BY
r.retour_nr,
c.name,
c.contact,
c.email
";
Dus id weg en in GROUP BY alle velden.
Dit kan ook
$sql = "
SELECT DISTINCT
r.retour_nr,
c.name,
c.contact,
c.email
FROM
retouren AS r
INNER JOIN
clients AS c
ON c.ID = r.contact
";
Hier ook id weg en alleen unieke waardes terug (DISTINCT)
Dat zeg ik dus - je database mist een entiteit die ervoor zorgt dat je retouritems gegroepeerd kunnen worden onder één retournummer. Lees mijn vorige reactie nogmaals.