Toon posts:

[MySQL] MIN() en GROUP BY?

Pagina: 1
Acties:

Verwijderd

Topicstarter
Hoi tweakers

even een vraagje:

Ik heb een klein cms voor m'n site gemaakt met een database.
Er zitten 2 tabellen in de database, 1 met categorien en 1 met pagina's.

Nu wil ik uit de database alle gegeven (id, name, html, date, cat_id) van 1 pagina ophalen.
Dat moet de pagina met de laagste cat_id zijn, binnen één ingegeven categorie.

Met de volgende query krijg ik de foutmelding dat ik GROUP of GROUP BY moet
gebruiken ofzo. Ik begrijp het eerlijk gezegd niet zo.

SELECT *, MIN(page_id) FROM pages WHERE page_cat_id = $_GET['cat_id'] LIMIT 1;

Iemand een idee?

  • Mr_Dark
  • Registratie: Januari 2003
  • Laatst online: 23-11 21:58

Mr_Dark

Gotta catch 'em all

SQL:
1
SELECT * FROM pages WHERE page_cat_id = $_GET['cat_id'] ORDER BY cat_id LIMIT 1;


zoiets?

[zeurmode]
Ik zou wel $_GET escapen ivm SQL-Injection :)
[/zeurmode]

[ Voor 26% gewijzigd door Mr_Dark op 01-07-2007 23:03 ]


Verwijderd

laagste page_id uit de cat bedoel je zeker?
SELECT * FROM pages WHERE page_cat_id = $_GET['cat_id'] ORDER BY page_id LIMIT 1;

Tip 1: koop en lees dit boek

Tip 2: lees iets over PHP security, je maakt een ernstige fout door niet te escapen!

Verwijderd

http://w3schools.com/sql/sql_groupby.asp
Aggregate functions (like SUM) often need an added GROUP BY functionality.
MIN is ook een Aggregate function. Is ook wel logisch dat jij ergens op wil groeperen. Want SQL weet standaard niet van welek verzameling jij het minimum wil hebben.

Verder is me niet echt duidelijk wat je precies allemaal wil hebben dus de precieze query kan ik niet geven.

edit:
Andere antwoorden: helpen specifiek voor dit probleem, maar probeer ook even de foutmelding te snappen ;)

[ Voor 12% gewijzigd door Verwijderd op 01-07-2007 23:04 ]


  • Keiichi
  • Registratie: Juni 2005
  • Laatst online: 19:36
Mr_Dark schreef op zondag 01 juli 2007 @ 23:01:
SQL:
1
SELECT * FROM pages WHERE page_cat_id = $_GET['cat_id'] ORDER BY cat_id ASC LIMIT 1;


zoiets?
:') klinkt goed :')

Maar zullen we de get variable maar eens door mysql_escape_string halen voordat er heeeel enge dingen gebeuren :)

Solar @ Dongen: http://solar.searchy.net/ - Penpal International: http://ppi.searchy.net/


  • Mr_Dark
  • Registratie: Januari 2003
  • Laatst online: 23-11 21:58

Mr_Dark

Gotta catch 'em all

Keiichi schreef op zondag 01 juli 2007 @ 23:04:
[...]


:') klinkt goed :')

Maar zullen we de get variable maar eens door mysql_escape_string halen voordat er heeeel enge dingen gebeuren :)
Ik had me bericht al geedit ;), maar ik mag aannemen dat de TS wel enige kennis van PHP escaping heeft... ;)

  • Keiichi
  • Registratie: Juni 2005
  • Laatst online: 19:36
Mr_Dark schreef op zondag 01 juli 2007 @ 23:11:
[...]


Ik had me bericht al geedit ;), maar ik mag aannemen dat de TS wel enige kennis van PHP escaping heeft... ;)
Ik zag het al, te laat :P

Maar ik weet niet of je zo er vanuit mag gaan dat iedereen een goed oog op zulke security heeft. Ik weet zelf dat ik toen ik nog niet zo lang met php bezig was dat ik maar vaak zat potentiele MySQL injection fouten gemaakt heb, omdat ik gewoon niet beter wist. :$ :$

Solar @ Dongen: http://solar.searchy.net/ - Penpal International: http://ppi.searchy.net/


Verwijderd

Topicstarter
Het was een voorbeeld query, natuurlijk escape ik $_GET

Het idee is dat ik de oudste pagina wil van de groep pagina's met page_cat_id = $_GET['cat_id']

Of te wel de oudste pagina binnen één categorie.

Het onderstaande lijkt me een prima oplossing

code:
1
SELECT * FROM pages WHERE page_cat_id = $_GET['cat_id'] ORDER BY page_id ASC LIMIT 1;


Toch bijft het met dwars zitten dat ik met MIN(kolomnaam) alleen die ene waarde terug krijgt. Kan het niet gebruikt worden om het gehele record op te halen?

Als ik om de kleinste waarde vraag dan hoef ik toch nergens op te groeperen? Dat is toch maar één waarde?

Verwijderd

Natuurlijk kun je met MIN(blaat) de kleinste waarde opvragen, maar als je tegelijkertijd ook nog 's * (alle velden) opvraagt is er geen enkele database die daar chocola van kan maken. MySQL doet dan vaak nog wel een poging, maar dat is meer "God zegen de greep". MSSQL, Oracle, PostgreSQL, Interbase/FireBird, DB2, Sybase, Informix, etc. zullen 't doodgewoon vertikken.
't Is nl. geen valid SQL.
Pagina: 1