[PHP/MySQL] order by/group by werkt niet

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Ik probeer een selectie te maken in een database, waarbij een aantal producten worden aangeroepen. Een aantal producten staan twee of meerdere keren in de database. Deze hebben het zelfde artikelnummer, maar een ander id. Dit id bevat de kleurinformatie van het product.

Nu is de bedoeling dat een product maar één keer wordt weergegeven in het zoekresultaat. In het volgende scherm moet de gebruiker dan de kleur kunnen opgeven. Ik had bedacht om dit met een GROUP BY te doen, maar dit gaat nog niet helemaal goed (helemaal niet).

Wat ik heb gedaan is het volgende:

code:
1
2
3
4
5
6
7
$sql = "SELECT id, artikelnummer, naam, prijs FROM producten WHERE hoofd='$cat' GROUP BY artikelnummer"; 
$result = mysql_query($sql);

while ($row = mysql_fetch_object($result)) 
{ 
hier iets met die gegevens doen
}


Ik krijg hierbij echter de volgende foutmelding:

Warning: mysql_fetch_object(): supplied argument is not a valid MySQL result resource

Als ik het SQL-statement aanpas en de GROUP BY weg haal, krijg ik de foutmelding niet.

Iemand een idee hoe ik het resultaat wel op m'n scherm krijg?

Acties:
  • 0 Henk 'm!

  • TeeDee
  • Registratie: Februari 2001
  • Laatst online: 21:07

TeeDee

CQB 241

Heb het idee dat er iets fouts in je GROUP BY zit.
P&W FAQ - SQL
Ten 2e: print je SQL query eens op het scherm.

[ Voor 21% gewijzigd door TeeDee op 31-05-2005 11:38 ]

Heart..pumps blood.Has nothing to do with emotion! Bored


Acties:
  • 0 Henk 'm!

  • LuCarD
  • Registratie: Januari 2000
  • Niet online

LuCarD

Certified BUFH

http://nl3.php.net/manual/nl/function.mysql-error.php

Wat geeft mysql voor een foutmelding?

Programmer - an organism that turns coffee into software.


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
TeeDee schreef op dinsdag 31 mei 2005 @ 11:37:
Heb het idee dat er iets fouts in je GROUP BY zit.
P&W FAQ - SQL
Ten 2e: print je SQL query eens op het scherm.
Dit is een echo vanaf het beeldscherm...

SELECT id, artikelnummer, naam, prijs FROM producten WHERE hoofd='13' GROUP BY artikelnummer

Gek genoeg werkt het ook niet (zelfde fout) als ik een order by doe... Met group by heb ik dan niet al te veel ervaring, maar een simpele order by moet wel lukken dacht ik zo... :/

Acties:
  • 0 Henk 'm!

  • T-MOB
  • Registratie: Maart 2001
  • Laatst online: 16:36
Ik zou sowieso eens goed kijken wat een group by precies doet. In de faq van P&W staat daarvoor best een uitgebreid verhaal.

Je probleem is volgens mij ook zonder group by op te lossen aangezien je "id" blijkbaar helemaal niet relevant is (bevat alleen kleurinformatie en je wil hem toch wegaggregeren met je group by). Je kunt dus gewoon een SELECT DISTINCT op je andere kolommen loslaten.

Overigens vind ik het vreemd dat je een kolom met kleurinformatie "id" noemt. Daarnaast is deze manier van indelen niet erg efficient. Je zet nu namelijk voor elke kleur van een product opnieuw het artikelnummer, de naam en de prijs in een tabel. Dat levert je bovendien problemen op zoals die waar je nu tegenaan loopt... Met een genormaliseerde database had je dit niet gehad!

Regeren is vooruitschuiven


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
T-MOB schreef op dinsdag 31 mei 2005 @ 11:45:
Ik zou sowieso eens goed kijken wat een group by precies doet. In de faq van P&W staat daarvoor best een uitgebreid verhaal.

Je probleem is volgens mij ook zonder group by op te lossen aangezien je "id" blijkbaar helemaal niet relevant is (bevat alleen kleurinformatie en je wil hem toch wegaggregeren met je group by). Je kunt dus gewoon een SELECT DISTINCT op je andere kolommen loslaten.

Overigens vind ik het vreemd dat je een kolom met kleurinformatie "id" noemt. Daarnaast is deze manier van indelen niet erg efficient. Je zet nu namelijk voor elke kleur van een product opnieuw het artikelnummer, de naam en de prijs in een tabel. Dat levert je bovendien problemen op zoals die waar je nu tegenaan loopt... Met een genormaliseerde database had je dit niet gehad!
Ben ik helemaal met je eens. Alleen heb ik een excelbestand met 10.000 records moeten inlezen.

Kan het niet zijn dat de fout in de functie mysql_fetch_object zit? Ik kan namelijk wel het aantal records tellen mbv de functie mysql_num_rows...

[ Voor 9% gewijzigd door Verwijderd op 31-05-2005 11:48 ]


Acties:
  • 0 Henk 'm!

  • TeeDee
  • Registratie: Februari 2001
  • Laatst online: 21:07

TeeDee

CQB 241

Verwijderd schreef op dinsdag 31 mei 2005 @ 11:46:
[...]
Ben ik helemaal met je eens. Alleen heb ik een excelbestand met 10.000 records moeten inlezen.
Niet relevant en imho geen excuus. Als je duidelijke data eruit wil krijgen ga je voordat je het in je db stopt transformeren.

Dus wat nu? Debuggen. Loop je query na, strookt die wel met hetgeen je in je db hebt?

Heart..pumps blood.Has nothing to do with emotion! Bored


Acties:
  • 0 Henk 'm!

  • T-MOB
  • Registratie: Maart 2001
  • Laatst online: 16:36
Verwijderd schreef op dinsdag 31 mei 2005 @ 11:46:
[...]


Ben ik helemaal met je eens. Alleen heb ik een excelbestand met 10.000 records moeten inlezen.
Ok, als het dan per se met een group by moet. Je moet aggregate functies gebruiken voor alle kolommen die niet in je group by clausule staan. Bijvoorbeeld:
code:
1
2
3
4
SELECT max(id), artikelnummer, max(prijs), max(naam)
FROM tabel 
WHERE condition=true 
GROUP BY artikelnummer

Regeren is vooruitschuiven


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Bedankt voor de hulp. Kom er nu pas achter (vrij dom) dat die id op deze pagina niet gebruikt wordt... Zonder dat werkt het prima dmv distinct...

[ Voor 9% gewijzigd door Verwijderd op 31-05-2005 11:55 ]

Pagina: 1