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?

Alvast bedankt!
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.

Wat wil je precies als resultaat hebben?
Kijk:


Aan een retour nummer kunnen meerdere producten aan vast zitten.
Dus een retour nummer kan wel 8 keer voorkomen in een tabel.

Daarom wil ik alle retour nummers groeperen

Voorbeeld:


Retournummer Bedrijfsnaam Contact E-mailadres
2102009044.30-09-15-11-4 Dalton Joni Fleischer [email protected] (Product 1)

2102009044.16-09-15-17-1 Dalton Joni Fleischer [email protected] (Product 1)
2102009044.16-09-15-17-1 Dalton Joni Fleischer [email protected] (Product 2)

2102009044.15-09-15-18-58 Dalton Joni Fleischer [email protected] (Product 1)
2102009044.15-09-15-18-58 Dalton Joni Fleischer [email protected] (Product 3)
2102009044.15-09-15-18-58 Dalton Joni Fleischer [email protected] (Product 3)


Ik zou niet weten hoe ik dan een aggregate functie moet toepassen in mijn SQL zodat de GROUP BY werkt.
Dat is dus GROUP BY.


Ik wil dus dat:

2102009044.30-09-15-11-4 Dalton Joni Fleischer [email protected] (Product 1)

2102009044.16-09-15-17-1 Dalton Joni Fleischer [email protected] (Product 1)
2102009044.16-09-15-17-1 Dalton Joni Fleischer [email protected] (Product 2)

2102009044.15-09-15-18-58 Dalton Joni Fleischer [email protected] (Product 1)
2102009044.15-09-15-18-58 Dalton Joni Fleischer [email protected] (Product 2)
2102009044.15-09-15-18-58 Dalton Joni Fleischer [email protected] (Product 3)

Dit wordt:

2102009044.30-09-15-11-4 Dalton Joni Fleischer [email protected] (Product 1)

2102009044.16-09-15-17-1 Dalton Joni Fleischer [email protected] (Product 1+2)

2102009044.15-09-15-18-58 Dalton Joni Fleischer [email protected] (Product 1+2+3)
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.
Elke retour heeft 1 contact.

Elke retour kan 1 of meerdere producten bevatten


Clienten:
_____________________________________________________________________________________
ID | BEDRIJFSNAAM | CONTACT | EMAIL
_____________________________________________________________________________________
33860 | DALTON | Joni Fleischer | [email protected]
24041 | JUMBO | Hallo Jumbo | [email protected]
-------------------------------------------------------------------------------------

Retouren:
______________________________________________
ID | RETOURNUMMER | CONTACT_ID
______________________________________________
1 | 2102009044.30-09-15-11-4 | 33860
2 | 2102009044.30-09-15-11-4 | 33860
3 | 2102009044.30-09-15-11-4 | 33860
4 | 2102009044.15-09-15-18-58 | 24041
----------------------------------------------



SQL die nu gebruikt wordt:

$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
";
je query zou iets kunnen zijn als

SELECT retournr, GROUP_CONCAT(product)
FROM tabel
GROUP BY retournr

Maar in je tabel Retouren staat weer geen product genoemd... ?

Je datamodel is wat lastig (of je geeft in dit topic te weinig info.

De lijst van je post van 11:30 zou met order by gedaan moeten worden. Maar bij nader inzien was dat dus niet je vraag.

Waar staan de producten nu?

$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.

Reageren