indahla Skrevet 29. januar 2003 Del Skrevet 29. januar 2003 Jeg skal sjekke de 5 siste som er logget inn på en side og har derfor en tabell (login) som inneholder følgende informasjon: id | epost | --------------- 10 | epost1 | 9 | epost1 | 8 | epost1 | 7 | epost5 | 6 | epost5 | 5 | epost4 | 4 | epost2 | osv Når jeg prøver meg med: "select epost from login order by id desc limit 5" får jeg ut: epost1, epost1, epost1, epost5, epost5, noe som er helt riktig. men, når jeg bare vil ha ulike rader, bruker jeg: "select distinct epost from login order by id desc limit 5" får jeg ut: epost5, epost2, osv. nedover i tabellen. Det virker som MySQL hopper vilkårlig over rader i tabellen... Noen ideer? PS. Vakke så lett å forklare problemet. Lenke til kommentar
MailMan13 Skrevet 7. februar 2003 Del Skrevet 7. februar 2003 Jeg mener å ha lest før en plass at mySQL har problemer med distinct - order by kombinasjoner, det er mulig det kan ha noe med det å gjøre. Husk at mySQL ikke implementerer mer enn ca 20% av iso-standarden for sql, så det hender at riktig sql kan få mysql til å oppføre seg rart. Gir denne samme resultat? (nå er ikke jeg noen guru på sql, men jeg mener denne gjør samme jobben) select epost from login limit 5 order by id desc group by epost; Lenke til kommentar
indahla Skrevet 9. februar 2003 Forfatter Del Skrevet 9. februar 2003 Nei, det fungerte ikke som det skulle det heller... hm Lenke til kommentar
kilogram Skrevet 9. februar 2003 Del Skrevet 9. februar 2003 SELECT epost FROM login ORDER BY id DESC GROUP BY epost LIMIT 0,5 Dette bør gje deg riktige resultat. Kunne du gjeve oss ein cut'n'paste frå utdataene? (Legg det i [ code]-tags, slik at formatteringa vert rett). Lenke til kommentar
indahla Skrevet 9. februar 2003 Forfatter Del Skrevet 9. februar 2003 SELECT epost FROM login ORDER BY id DESC GROUP BY epost LIMIT 0,5 Dette bør gje deg riktige resultat. Kunne du gjeve oss ein cut'n'paste frå utdataene? (Legg det i [ code]-tags, slik at formatteringa vert rett). "You have an error in your SQL syntax near 'GROUP BY epost LIMIT 0,5'" Men, jeg tror jeg har funnet problemet: Tabellen min er bygget opp slik at den lager en linje i databasen for hver gang man logger inn på siden min. Siste innlogget vil derfor ha høyest ID i tabellen (derfor ORDER BY id DESC). Hvis jeg ikke har sagt det tidligere vil jeg vise de 5 siste som er logget inn på siden. Problemet med GROUP BY epost er at siden MySQL begynner i "bunnen" av tabellen, på lavest ID. epost'er som ligger lengre opp i tabellen bli borte fordi den eksisterer lengre ned i tabellen. Derfor vil den "hoppe over" noen epost'er i toppen av tabellen fordi de er allerede "funnet" av MySQL lengre ned (hvis dere skjønnte den???) Derfor, ingen god ide å bruke GROUP BY, så lenge jeg skal ha data'ene sortert synkende på ID... Flere ideer tas imot med takk! Lenke til kommentar
kilogram Skrevet 10. februar 2003 Del Skrevet 10. februar 2003 Eg trur eg skjønte kva du meinte. Men, då bør jo denne koden gjere trikset... SELECT epost FROM login ORDER BY id ASC GROUP BY epost LIMIT (COUNT(epost) - 5), 5 Lenke til kommentar
indahla Skrevet 12. februar 2003 Forfatter Del Skrevet 12. februar 2003 Eg trur eg skjønte kva du meinte. Men, då bør jo denne koden gjere trikset... SELECT epost FROM login ORDER BY id ASC GROUP BY epost LIMIT (COUNT(epost) - 5), 5 "You have an error in your SQL syntax near 'GROUP BY...'" hm... Lenke til kommentar
kilogram Skrevet 12. februar 2003 Del Skrevet 12. februar 2003 SELECT epost FROM login GROUP BY epost ORDER BY id ASC LIMIT (COUNT(epost) - 5), 5 Det var ikkje verre enn at ORDER BY skal komme etter GROUP BY... Testa det lokalt her no, mot ein totalt annleis database, og det gav meg resultat som eg forventa. Det med LIMIT virkar ikkje, og du er nødt til å hente dette ut på forhånd, t.d. som "SELECT count(epost) FROM epost GROUP BY epost", og sette denne verdien inn i staden for "(COUNT(epost) - 5)", då skal det virke fint... Litt uelegant å gjere det i to spørringar, men det BØR virke... Lenke til kommentar
Anbefalte innlegg
Opprett en konto eller logg inn for å kommentere
Du må være et medlem for å kunne skrive en kommentar
Opprett konto
Det er enkelt å melde seg inn for å starte en ny konto!
Start en kontoLogg inn
Har du allerede en konto? Logg inn her.
Logg inn nå