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
Denne side indeholder artikler med forskellige perspektiver på Identity & Access Management i private og offentlige organisationer. Artiklerne behandler aktuelle IAM-emner og leveres af producenter, rådgivere og implementeringspartnere.
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.