01. marts 2006 - 18:11Der er
9 kommentarer og 1 løsning
group by userid
hejsa,
$SQL = "select * from chatmsg where userid!='".intval($_COOKIE["uid"])."' group by userid order by id desc";
SQL virker normalt men den ORDER tingene omvendt
id userid msg 1 2 a 2 2 b 3 2 c
jeg får altid a og jeg prøver på at få fat i C og det får jeg kun ved at fjerne GROUP BY userid, men det har jeg brug for, gider ikke have 3 forskellige rows for den samme userid.
Du vil have seneste besked for brugeren med det aktuelle user_id? Så kan du vel bare fjerne din grouping og bruge den order, som du har - og så tilføje limit 1?
Ah, havde ikke set din ! - så du vil have seneste besked for alle andre brugere end dig selv? Det kan man ikke i en enkelt query. Bruger du mysql > 4.1, kan du bruge en subquery - ellers skal du vist til at lave flere queries.
Som sagt udføres sorteringen efter grupperingen - og du skal jo have den udført inden. Det kan man ikke umiddelbart. Du kan dog i én query hente user_id og MAX(id) for alle andre brugere, og så i en anden query hente alle tilhørende beskeder. Og hvis du kan bruge subqueries kan det gøres i én query. Men ikke i én query uden subqueries :)
Du kan ikke, mysql har nogle irriterende "features", hvor man godt kan hente kolonner ud, som ikke er grupperede selvom der er en gruppering. Her vil den dog altid tage den første række for grupperingen - sorteringen virker _ikke_ inden under grupperingen.
Du er lidt nødt til at stole på mig i den her sag - du er dog velkommen til at spørge nogle andre ;)
Du kan godt lave hvad du vil i en query, men at vi er i 2006 har ikke noget at gøre med, om du har en gammel mysql-version (altså under verison 4.1) eller bruger mysql - andre DBMS'er har kunnet gøre det i en query i mange år :)
Som sagt vil jeg gerne hjælpe med at lave det, men jeg vil bare stadig sige, at det ikke kan klares i en enkelte query helt som du ønsker det ;)
Man kan dog også designe sig ud af det - hav et felt i user-tabellen til at indeholde id'et for seneste gæstebogs-indlæg (eller hvordan felterne hænger sammen).
Og tark for points :)
Synes godt om
Ny brugerNybegynder
Din løsning...
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.