Avatar billede Slettet bruger
25. august 2008 - 18:08 Der er 22 kommentarer og
1 løsning

Avanceret MySQL Query (fortsat)

Hejsa,

Denne tråd fortsat: http://www.eksperten.dk/spm/841285

Jeg skal nu lave en "beskeder jeg har deltaget i" men kan VIRKELIG ikke finde ud af hvordan jeg skal lave SQL-en!

Det jeg kom frem til var:

SELECT *
FROM `pho_message` m1
WHERE m1.`id_group` =2
AND (
(
m1.`id_parent` != '0'
AND m1.`id`
IN (

SELECT MAX( m2.`id` )
FROM `pho_message` m2
WHERE m2.`id_user` =36
GROUP BY m2.`id_parent`
)
)
OR (
m1.`id_parent` =0
AND m1.`id_user` =36
AND NOT
EXISTS (

SELECT m3.`id`
FROM `pho_message` m3
WHERE m3.`id_parent` = m1.`id`
)
)
)
ORDER BY m1.`date_show` DESC
LIMIT 0 , 30

---

Men det skriver ikke poster hvor det sidste svar er skrevet af en anden...

Nogle frisk på en lille hjælper? :(
Avatar billede Slettet bruger
25. august 2008 - 18:16 #1
Lidt mere overskuelig udgave af SQL-en: http://peecee.dk/uploads/082008/Untitled-2.png
Avatar billede fant0mas Nybegynder
25. august 2008 - 18:31 #2
Snakker vi trådet forum ala slashdot.org?
Ellers er jeg vist ikke helt med. -beskeder jeg har deltaget i?
Avatar billede jakobdo Ekspert
25. august 2008 - 19:22 #3
Nu spørger jeg muligvis dumt, men er der en grund til du har spurgt i php og ikke database -> mysql ?
Avatar billede Slettet bruger
25. august 2008 - 21:34 #4
fant0mas:
Vi snakker debatliste (oversigt).
Hvor man så kan vælge mellem "Alle beskeder" og denne, "Beskeder, jeg har deltaget i"

En besked = en tråd

jakobdo:
Ren og skær at jeg ikke vidste den fandtes :/
Avatar billede jakobdo Ekspert
25. august 2008 - 21:37 #5
Fair nok, jeg spurgte også bare! :o)
Avatar billede cronick Nybegynder
26. august 2008 - 12:40 #6
Du skal vel gøre brug af mere end blot én MySQL tabel. Du bruger pt. kun 'pho_message'. For at finde ud af hvorvidt man har deltaget i en debat, skal du vel også inddrage den tabel, hvori alle svarene gemmmes?

Jeg ville personligt have brugt alm. JOIN til din løsning - men jeg kan se at du bruger en masse selects, så kan jeg vist ikke svare på.
Avatar billede Slettet bruger
26. august 2008 - 16:09 #7
cronick:
Hvis id_parent er 0 opfattes den som trådstarter, ellers som et svar.
Avatar billede cronick Nybegynder
26. august 2008 - 18:22 #8
Kan du ikke give os et overblik over din(e) tabel(ler)? For jeg forstår stadigvæk ikke, hvordan du vha. kun én tabel, kan afgøre, om personen deltager i dit forum/beskedsystem, samt udskrive selve debatten/beskeden.
Avatar billede Slettet bruger
26. august 2008 - 18:36 #9
Avatar billede cronick Nybegynder
26. august 2008 - 18:42 #10
Du må vel have en tabel, hvori svarene gemmes?
Avatar billede Slettet bruger
26. august 2008 - 19:06 #11
Ja, det er samme tabel - her er bare `id_parent` ikke lig 0, men lig det `id` trådstarterens besked har
Avatar billede cronick Nybegynder
26. august 2008 - 20:09 #12
Hvordan kan du gemme svarene i samme tabel, som selve tråden bliver lagt ind i?
Avatar billede Slettet bruger
26. august 2008 - 20:38 #13
Er det ikke det jeg lige har forklaret dig ? :)
Avatar billede jakobdo Ekspert
26. august 2008 - 20:44 #14
cronick: rapsac bruger denne opbygning:

id, title, indhold, parent
1 - hej mor - hej med dig mor - 0
2 - hej søn - hej med dig søn - 1
3 - hej igen - hej igen med dig - 2

Det betyder hovedtråd = 1
id = 2 er svar til hovedtråd 1 (derfor parent 1)
osv...
Avatar billede Slettet bruger
26. august 2008 - 22:52 #15
ja, bortset fra en rettelse i 3:

3 - hej igen - hej igen med dig - 1

idét man kun kan svare trådstarteren
Avatar billede cronick Nybegynder
26. august 2008 - 23:22 #16
Sikke en speciel måde at lave et fora på - det har jeg ikke set for :-)

Hvis du er villig til at prøve INNER JOIN, frem for så mange selections, så kan du med fordel prøve det følgende:

$brugernavn_id = "1"; // eks på id af en bruger

mysql_query("SELECT `pm1`.* FROM `pho_message` AS `pm1` INNER JOIN `pho_message` AS `pm2` ON `pm1`.`id` = `pm2`.`id_parent` AND `pm2`.`id_user` = '".$brugernavn_id."' WHERE `pm1`.`id_parent` = '0' GROUP BY `pm1`.`id` ORDER BY `pm2`.`date_show` DESC")or die(mysql_error());
Avatar billede Slettet bruger
27. august 2008 - 07:44 #17
Ser lige på det lidt senere, tak for input!

Ang. opbygningen synes jeg også det er latterligt, men sådan er det når man får kode outsourcet :)
Avatar billede jakobdo Ekspert
27. august 2008 - 08:00 #18
Jeg synes ikke den opbygning er latterlig, jeg synes opbygningen af tabellen er smart.

Hvordan ville cronick lave det ?
Avatar billede cronick Nybegynder
27. august 2008 - 14:55 #19
Jeg have oprettet to tabeller til formålet. En til selve tråden, og en de tilhørende svar. Jeg ser på et fora på samme måde som et artikel-register. Det ville virke en smule besynderligt, at have både artiklerne samt artikel-kommentarene i samme tabel - ligesom det er situationen her. Det er selvfølgelig smag og behag, men for mig virker det bare mere overskueligt, samt struktureret.
Avatar billede cronick Nybegynder
04. september 2008 - 13:05 #20
Er du kommet nærmere en løsning, rapsac?
Avatar billede Slettet bruger
04. september 2008 - 13:31 #21
Hov ja, undskyld fik en ven til at se på det :) Skriv et smar hvis du lyster points - jeg er sådan set ligeglad med dem:)
Avatar billede cronick Nybegynder
04. september 2008 - 13:39 #22
Jeg skriver kun et svar, hvis du rent faktisk kunne bruge mine svar til noget. Hvis ikke, så synes jeg bare du skal tage dem selv - såfremt jakobdo selvfølgelig ikke har nogen indvendinger.. :-)

Kunne vi ikkke også få den endelige (og fungerende) Query at se?
Avatar billede Slettet bruger
02. april 2012 - 10:01 #23
Lukker
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