11. august 2008 - 21:16Der 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
Skal virksomheder stå stærkere mod angreb og kunne udvikle sig, skal sikkerhed, drift og forretning tænkes sammen. Det er tanken bag Jysk IT’s ambition om at skabe en “sikker fremtid” for kunderne.
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"
SELECT * FROM `your_table` LIMIT 0, 10 This will display the first 10 results from the database
Synes godt om
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...
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
Synes godt om
Slettet bruger
14. august 2008 - 00:28#8
Ser interessant ud, kigger på det i morgen :-)
Synes godt om
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 :(
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
Synes godt om
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 ! ;-)
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.