Avatar billede Slettet bruger
11. august 2008 - 21:16 Der er 13 kommentarer og
1 løsning

Lettere avanceret MySQL Query? Driller mig i hvert fald!

Hejsa,

Jeg har et problem her - jeg skal have sorteret forumtråde via MySQL.
Opbygningen er således:

- id (numerisk index, auto_increment)
- id_group (index for kategori)
- id_parent (hvis 0: startbesked for en tråd; ellers: svar på forumtråd med index `id_parent`)
- date_show (dato besked blev postet)

Der er noget mere, men der er irrelevant.

Jeg vil altså gerne have en liste hvor alle forumtrådene postes - efter seneste svar.

Jeg havde selv tænkt noget ala:

$topicQuery = "SELECT * FROM `pho_message` GROUP BY `id_parent` WHERE `id_group`=\"".$sForum."\" AND `id_parent`!=\"0\" ORDER BY `date_show` DESC LIMIT ".$sOffset.", ".$sPerPage;

Og så i listen lave en funktion der finder frem til hver beskeds "parent" - if you follow me?
Men her får jeg en irriterende MySQL-fejl:

You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'WHERE `id_group`="1" AND `id_parent`!="0" ORDER BY `date_show` DESC LIMIT 0, 4' at line 1

Og et print af min Query giver:

SELECT * FROM `pho_message` GROUP BY `id_parent` WHERE `id_group`="1" AND `id_parent`!="0" ORDER BY `date_show` DESC LIMIT 0, 4

Jeg vil være meget taknemmelig for hjælp!

Mvh
Caspar
Avatar billede Slettet bruger
11. august 2008 - 21:20 #1
Nu er jeg kommet et skridt videre!

Jeg flyttede min GROUP BY hen efter min WHERE - nu virker det, bortset fra den ikke vælger den nyeste post som "gruppens formand"

Anyone?
Avatar billede neeesn Nybegynder
12. august 2008 - 09:43 #2
Prøv at sætte limit til 1 i stedet for, så vælger den kun 1
Avatar billede Slettet bruger
12. august 2008 - 10:10 #3
Jamen så vælger den jo kun en, det er jo ikke det jeg skal?
Avatar billede neeesn Nybegynder
12. august 2008 - 10:47 #4
den vælger jo kun fra indlæg 0 - 4 hvis det sidste indlæg er nr 6 kan den ikke vælge det for du har begrænset den til 0 - 4 - vil jeg mene
Avatar billede neeesn Nybegynder
12. august 2008 - 10:50 #5
SELECT * FROM `your_table` LIMIT 0, 10
This will display the first 10 results from the database
Avatar billede Slettet bruger
12. august 2008 - 11:17 #6
Jeg har jo allerede sorteret, den vælger 0-4 efter jeg har sorteret, altså de 4 nyeste... Problemet er bare at den sorterer efter de er blevet inddelt i grupper - og gruppens "formand" er IKKE den nyeste post...
Avatar billede tmi Nybegynder
13. august 2008 - 10:56 #7
GROUP BY vælger tilfældige rækker og er uafhængig af ORDER BY

SELECT * FROM pho_message WHERE id_group = '1' AND id_parent != '0' AND id IN(SELECT MAX(id) FROM pho_message GROUP BY id_parent) ORDER BY date_show DESC LIMIT 0,4
Avatar billede Slettet bruger
14. august 2008 - 00:28 #8
Ser interessant ud, kigger på det i morgen :-)
Avatar billede Slettet bruger
16. august 2008 - 11:34 #9
Hejsa,

Den virker perfekt - lige bortset fra den ikke henter dem med id_parent=0 og hvor der ikke er svar :(

Caspar
Avatar billede tmi Nybegynder
16. august 2008 - 13:46 #10
Så fjern AND id_parent != '0' ;-)

SELECT * FROM pho_message WHERE id_group = '1' AND id IN(SELECT MAX(id) FROM pho_message GROUP BY id_parent) ORDER BY date_show DESC LIMIT 0,4;
Avatar billede Slettet bruger
16. august 2008 - 16:21 #11
Jamen så hvis der er svaret på et indlæg vil den jo blive vist 2 gange... Skal man lave noget AND id NOT IN(select query for id_parent=0) ???
Avatar billede tmi Nybegynder
17. august 2008 - 04:24 #12
Hvad så med noget ála:

SELECT * FROM pho_message m1 WHERE m1.id_group = '1' AND
((m1.id_parent != '0' AND m1.id IN(SELECT MAX(m2.id) FROM pho_message m2 GROUP BY m2.id_parent))
OR
(m1.id_parent = '0' AND NOT EXISTS(SELECT m3.id FROM pho_message m3 WHERE m3.id_parent = m1.id))
ORDER BY m1.date_show DESC LIMIT 0,4
Avatar billede Slettet bruger
17. august 2008 - 11:27 #13
Det virker fantastisk! Der skulle lige en ekstra ')' bag den sidste del af 'OR'-delen.
Men kom med et svar ! ;-)

Takker MEGET for hjælpen :-)
Avatar billede tmi Nybegynder
17. august 2008 - 12:18 #14
Selv tak :-)
Avatar billede Ny bruger Nybegynder

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.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester