Black Friday = Pricewatch Bekijk onze selectie van de beste Black Friday-deals en voorkom een miskoop.
Toon posts:

MySQL Order By Clause

Pagina: 1
Acties:

Verwijderd

Topicstarter
Hi guys/girls,

Ik store wat informatie van mijn fotos in een database waaronder de database.
Wanneer ik met een query de fotos wil laten displayen kwam ik erachter dat hij wel mooi en netjes op datum sorteert maar niet bij invoer.
De oplossing hiervoor leek me simpel: ik sorteer op datum en ID. Alleen krijg ik steeds dezelfde output..

Mijn query:
SELECT * FROM `img_storage` WHERE img_album='public' ORDER BY `img_storage`.`img_ID` AND `img_storage`.`img_date` DESC


Weet iemand wat ik hier fout doe?
Wellicht moet ik ook met entry tijd ga werken ?

Hoor het graag van jullie :)
P.S: De bedoeling is dat de nieuwste afbeeldingen als eerste worden displayed, daarna de 2de nieuwste enzovoort.

  • MueR
  • Registratie: Januari 2004
  • Laatst online: 21:39

MueR

Admin Devschuur® & Discord

is niet lief

Wellicht moet je de MySQL manual eens doorlezen over de correct ORDER syntax? MySQL 5.0 Reference Manual : 12.2.8. SELECT Syntax.

Sorteren op je Primary Key geeft natuurlijk ook altijd dezelfde volgorde.

Oh, en de [code=sql] tag om je query is makkelijker, dan highlight ie ook meteen :)

[ Voor 38% gewijzigd door MueR op 29-10-2008 15:10 ]

Anyone who gets in between me and my morning coffee should be insecure.


  • RobIII
  • Registratie: December 2001
  • Niet online

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

(overleden)
Waar hoort mijn topic?
DTE >> PRG

En inderdaad: dit is nogal basic SQL kennis... Je ORDER BY clause klopt niet ( AND :? ). Wat het nut is van die 2e field waarop je wil sorteren ontgaat me ook als je ID toch al incremental is.

[ Voor 32% gewijzigd door RobIII op 29-10-2008 15:11 ]

There are only two hard problems in distributed systems: 2. Exactly-once delivery 1. Guaranteed order of messages 2. Exactly-once delivery.

Je eigen tweaker.me redirect

Over mij


Verwijderd

Topicstarter
Dit is mijn eerste PHP MySQL based website dus vergeef mijn fouten:)

Anyways, ik dacht dat wanneer je zou orderen op ID dat je dan het volgende krijgt:
1, 11, 12, 13....19, 2, 20, 21

of klopt dat niet ?

  • Haan
  • Registratie: Februari 2004
  • Laatst online: 21:57

Haan

dotnetter

Dat zou kloppen als ID een nvarchar is, maar dat is je ID veld niet (hoop ik :X )

Maar waarom heb je niet gewoon even die query getest wat het voor output geeft, dat is < 1 sec werk :?

[ Voor 39% gewijzigd door Haan op 29-10-2008 15:18 ]

Kater? Eerst water, de rest komt later


  • MueR
  • Registratie: Januari 2004
  • Laatst online: 21:39

MueR

Admin Devschuur® & Discord

is niet lief

Dit is nou een voorbeeldje van tekstsortering, waar MySQL jouw integers toch echt als cijfers beschouwd en daarom ook gewoon logisch sorteert van laag naar hoog.

Anyone who gets in between me and my morning coffee should be insecure.


  • mbaltus
  • Registratie: Augustus 2004
  • Laatst online: 06-11 13:15
Als het veld een tekstveld (varchar, etc.) is dan wel. In tekst is 11 namelijk kleiner dan 2. Als het een getal is (shortint, etc.) dan wordt er natuurlijk netjes numeriek gesorteerd, dus 2 is kleiner dan 11. Een order by op een veld A en B (gescheiden door een comma!) heeft alleen zin wanneer er meerdere velden A met dezelfde waarde zijn waarvoor verschillende B's zijn.

edit:
Spuit 11

[ Voor 6% gewijzigd door mbaltus op 29-10-2008 15:44 ]

The trouble with doing something right the first time is that nobody appreciates how difficult it is


  • Johnny
  • Registratie: December 2001
  • Laatst online: 13:22

Johnny

ondergewaardeerde internetguru

RobIII schreef op woensdag 29 oktober 2008 @ 15:10:
Waar hoort mijn topic?
DTE >> PRG

En inderdaad: dit is nogal basic SQL kennis... Je ORDER BY clause klopt niet ( AND :? ). Wat het nut is van die 2e field waarop je wil sorteren ontgaat me ook als je ID toch al incremental is.
Ik denk dat de datums wel hetzelfde zouden kunnen zijn, en dat de topictstarter er vanuit ging dat net zoals andere plaatsen waar je AND gebruikt de volgorde niet uitmaakt.

Maar aangezien het hier om foto's gaat die hoogst waarschijnlijk gemaakt zijn met een digitale camera wil ik de topictarter er op wijzen dat deze in de EXIF/IPTC-metadata ook de precieze datum en tijd bevatten wanneer de foto's zijn gemaakt, met moderne fotobeheerprogramma's kun je zelfs nog meer informatie toevoegen die bij het uploaden naar je website dan in je database kan plaatsen.

Aan de inhoud van de bovenstaande tekst kunnen geen rechten worden ontleend, tenzij dit expliciet in dit bericht is verwoord.


  • curry684
  • Registratie: Juni 2000
  • Laatst online: 06-09 00:37

curry684

left part of the evil twins

Verwijderd schreef op woensdag 29 oktober 2008 @ 14:42:
SQL:
1
ORDER BY `img_storage`.`img_ID` AND `img_storage`.`img_date` DESC
Ervan uitgaande dat img_ID en img_date beiden gezet zijn voor iedere regel zal deze boolean expression op iedere regel evalueren tot 'true', en een lijstje 'trues' sorteren is niet enorm spannend omdat er weinig verschil tussen zit.

Professionele website nodig?


  • Tanuki
  • Registratie: Januari 2005
  • Niet online
En daarnaast is het sorteren op ID's niet alleen onnodig, het is gewoon FOUT.

Jij wilt de nieuwste eerst hebben en de oudste als laatste. Dat doe je dus door op datum te sorteren en per definitie niet op ID.

PV: Growatt MOD5000TL3-XH + 5720wp, WPB: Atlantic Explorer v4 270LC, L/L: MHI SCM 125ZM-S + SRK 50ZS-W + 2x SRK 25ZS-W + SRK 20ZS-W Modbus kWh meter nodig?


  • MueR
  • Registratie: Januari 2004
  • Laatst online: 21:39

MueR

Admin Devschuur® & Discord

is niet lief

Johnny schreef op woensdag 29 oktober 2008 @ 15:20:
Maar aangezien het hier om foto's gaat die hoogst waarschijnlijk gemaakt zijn met een digitale camera wil ik de topictarter er op wijzen dat deze in de EXIF/IPTC-metadata ook de precieze datum en tijd bevatten wanneer de foto's zijn gemaakt, met moderne fotobeheerprogramma's kun je zelfs nog meer informatie toevoegen die bij het uploaden naar je website dan in je database kan plaatsen.
Niet om je an sich correcte mededeling af te doen als onzin, maar aangezien de TS voor het eerst met PHP/MySQL werkt, is EXIF meta data uitlezen misschien net wat te hoog gegrepen ;)

Anyone who gets in between me and my morning coffee should be insecure.


  • RobIII
  • Registratie: December 2001
  • Niet online

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

(overleden)
MueR schreef op woensdag 29 oktober 2008 @ 15:24:
[...]

Niet om je an sich correcte mededeling af te doen als onzin, maar aangezien de TS voor het eerst met PHP/MySQL werkt, is EXIF meta data uitlezen misschien net wat te hoog gegrepen ;)
Daarbij kan ik dan een foto uploaden met 'gespoofte' EXIF info met een datum van 1-1-2099 en mijn foto staat komende 90 jaar boven aan :Y)

There are only two hard problems in distributed systems: 2. Exactly-once delivery 1. Guaranteed order of messages 2. Exactly-once delivery.

Je eigen tweaker.me redirect

Over mij


Verwijderd

Topicstarter
Ik ben wel bekend met EXIF data en ik ben er van bewust hoe en wat er instaat (werk al 5 jaar met photoshop, daar vanuit heb ik de ervaring opgedaan). Anyways,

@Haan:
Mijn ID veld is gewoon zoals het hoort te zijn, en de query test ik ook de hele tijd en daaruit heb ik opgemaakt dat het niet werkt.

@Localhost:
Ik liet mijn fotos op datum sorteren, dat werkt gewoon prima. Maar wanneer ik om 12:00 een foto upload en om 12:02 weer dan komt die pas NA de foto die om 12:00 is geupload, terwijl ik dat juist andersom wil hebben..


Situatie nu:
Ik upload de fotos en sorteer op ID. Mijn gedachtegang over het sorteren was dus onjuist, de gene met de laatste id komt als eerste. Toch heb ik een veld met de datum en een veld met de tijd van upload erbij geplaatst voor het geval dat ik dat toch moet aanpassen in de toekomst.

Maar vanwege de opmerking van Localhost twijfel ik er dus aan of het nou WEL of NIET goed is om op ID te blijven sorteren ??

  • Johnny
  • Registratie: December 2001
  • Laatst online: 13:22

Johnny

ondergewaardeerde internetguru

MueR schreef op woensdag 29 oktober 2008 @ 15:24:
[...]

Niet om je an sich correcte mededeling af te doen als onzin, maar aangezien de TS voor het eerst met PHP/MySQL werkt, is EXIF meta data uitlezen misschien net wat te hoog gegrepen ;)
Ik was mijn post al aan het typen toen die reactie werd geplaatst, dus ging er op dat moment nog vanuit dat de topictstarter iets meer ervaring had.

Aan de inhoud van de bovenstaande tekst kunnen geen rechten worden ontleend, tenzij dit expliciet in dit bericht is verwoord.


  • Janoz
  • Registratie: Oktober 2000
  • Laatst online: 15-11 11:40

Janoz

Moderator Devschuur®

!litemod

Verwijderd schreef op woensdag 29 oktober 2008 @ 16:04:
Maar vanwege de opmerking van Localhost twijfel ik er dus aan of het nou WEL of NIET goed is om op ID te blijven sorteren ??
Het is NIET goed om op ID te sorteren. Zeker niet wanneer je een tijdstip beschikbaar hebt. Daarnaast is al meerdere keren aangegeven dat je met AND niet het resultaat hebt wat jij waarschijnlijk verwacht.

Ken Thompson's famous line from V6 UNIX is equaly applicable to this post:
'You are not expected to understand this'


  • remco_k
  • Registratie: April 2002
  • Laatst online: 16:54

remco_k

een cassettebandje was genoeg

Verwijderd schreef op woensdag 29 oktober 2008 @ 16:04:
Maar vanwege de opmerking van Localhost twijfel ik er dus aan of het nou WEL of NIET goed is om op ID te blijven sorteren ??
Sorteren op ID is niet per definitie fout, het hangt gewoon af van je wensen.
Als je wilt dat het laatst toegevoegde record bovenaan komt te staan, en ID is autoincrement, dan kan je prima sorteren op ID DESC. Maar aanraden zal ik het zeker niet en al helemaal niet als er andere velden beschikbaar zijn die daarvoor gebruikt kunnen/dienen te worden.
Want daarmee beperk je dan wel wat mogelijkheden voor in de toekomst.
Beter is om meteen met een datum en tijd veld te werken, of beter nog: 1 timestamp (datum + tijd in 1 kolom) veld.
De timestamp vul je in op het moment dat je het uploaden start, en in de toekomst bouw je dat om naar lezen uit de exif data.
Dan sorteren op 'timestamp desc' is mooi genoeg.

[ Voor 8% gewijzigd door remco_k op 29-10-2008 16:15 ]

Alles kan stuk.


Verwijderd

Topicstarter
@Janoz: Dat had ik al begrepen, ben daar ook gelijk netjes vanaf gestapt. Toch bedankt dat je me weer op mijn fouten wees :)

@Remco_k: Bedankt voor je uitleg, ik wilde nog uitzoeken wat nou timestamp was. Dat is dus, zoals ik begrijp, een combinatie van datum + tijd? Zou ik dan bij het vullen van een timestamp veld gebruiken maken van NOW() ? Kan ik dit ook via PHP invullen (combinate van date(); en time();)?

@Iedereen: Bedankt voor de supersnelle reacties!

  • BalusC
  • Registratie: Oktober 2000
  • Niet online

BalusC

Carpe diem

offtopic:
Flamer, jouw icon heeft een hotlinkbeveiliging. Ik zie een rood plaatje met een verbodssymbool en "HOTLINK" erop, terwijl het volgens mij jouw intentie was om zo'n Windows-achtig Admin-hoofd met een groen stropdas te tonen.

[ Voor 63% gewijzigd door BalusC op 29-10-2008 16:20 ]


Verwijderd

Topicstarter
BTW ik heb zelf effe gekeken naar timestamp en heb ontdekt dat er een functie CURRENT_TIMESTAMP bestaat wat gelijk beide invoert. dat is wel handig, ik kan dan met PHP zelf de gegeven informatie splitsen in wat ik graag zou willen zien :D Ik vindt het helemaal geweldig!:D

BTW
@BalusC: Jah bedankt, ik zag het effe niet indd. En neej het was geen Admin poppeke maar een SuperNova (Flamer, vuur, supernova:D).
Pagina: 1