Avatar billede zac Nybegynder
27. marts 2004 - 22:26 Der er 11 kommentarer og
1 løsning

Udvalg på tværs af to tabeller, men så også inden for den ene

Jeg har, til debat-ting, to tabeller med felter, der udsættes for søgning:

tb1: id, traad, indhold
(tråden fælles for flere indhold/indlæg)
tb2: id, traad, parent, author
(parent har forskelligt nr. for de forskellige indlæg i samme tråd, samme author/ navn kan optræde i samme tråd flere gange, dvs. have forskellige parent-nr.).

Den her finder for meget:

$result = mysql_query( "SELECT tb1.*, tb2.*
FROM tb1, tb2
WHERE tb1.indhold LIKE '%$find%'
AND tb1.traad = tb2.traad
");

Her bliver ETHVERT af trådens indlæg forbundet med ALLE authors, som har deltaget i tråden.
Hvordan gå videre, så man for en author kun får det/de indlæg, der er unik(ke).
Dvs. indhold efter parent OG author i forskellige kombinationer inden for den enkelte tråd.

Kan det gøres i MySQL, måske i retning af

$result = mysql_query( "SELECT tb1.*, tb2.*
FROM tb1, tb2
WHERE tb1.indhold LIKE '%$find%'
AND tb1.traad = tb2.traad
");
while {
        $result = mysql_query( "SELECT tb1.*, tb2.*
        FROM tb1, tb2
        WHERE .... ??? (parent && author er unik kombination i tabellen tb2 indenfor hver tråd)
        ");
        }
}

Eller skal der PHP løsning til?
Avatar billede htm Nybegynder
27. marts 2004 - 22:37 #1
Jeg forstår simpelthen ikke hvad det er du ønsker at hive ud? Kan du ikke forklare dine tabeller og give eks. på data og fortæller hvad du vil hive ud?
Avatar billede zac Nybegynder
28. marts 2004 - 11:32 #2
Ovenståede select giver (mindst?) to slags svar afhængig af debattens struktur:

jensen skrev x1-indlæg
madsen skrev x1-indlæg
selv om jensen skrev x1 (som 'find' er i), madsen x2, men både x1 og x2 er i samme tråd.

petersen skrev x5-indlæg
petersen skrev x6-indlæg
nielsen skrev x5-indlæg
nielsen skrev x6-indlæg
selv om petersen skrev x5 og nielsen x6 (og 'find' er i både x5 og x6)

Hvordan får jeg: jensen x1 hhv. petersen x5, nielsen x6?
Tabel tb1 har koblet indlæg og tråd med tb2, og tb2 har for hvert enkelt indlæg også parent og author.
Øvelsen består så i at få SELECT til, efter den første kobling af tb1 og tb2, at gøre noget ved tb2, så der kun fås forfatterens eget indlæg i tråden.
Avatar billede htm Nybegynder
28. marts 2004 - 11:41 #3
Må indrømme forstår stadig ikke ret meget af hvad du ønsker. Det er måske sådan hvor du vil have forfatteren med i din SQL ?

SELECT tb1.*, tb2.*
FROM tb1, tb2
WHERE tb1.indhold LIKE '%$find%' AND tb1.traad = tb2.traad AND tb2.author = 'jensen'
");
Avatar billede zac Nybegynder
28. marts 2004 - 12:55 #4
Jae, bortset fra, at der ikke sendes værdi for author med!
Uden dit sidste "AND tb2.author = 'jensen'" selectes alle indlæg i tråden, selv om kun en af dem har 'find' i sig.
Kan vi ikke få tråd OG parent (og dermed author) frem for præcis det indlæg, der har 'find'?
Avatar billede htm Nybegynder
28. marts 2004 - 13:04 #5
Kan du ikke lige lave et eks. på hvad der står af data i tabellen?

eks.

tb1:
------------------------
id    traad    indhold
------------------------
1    1    bla bla
2    1    buh buh

tb2:
------------------------------------
id    traad    parent    author
------------------------------------
1    1    1    Jensen
1    2    2    Hansen

Og så give et resultat af hvad din ønskede SQl skal returnere?

eks

------------------------------------------------------------------------------------------
tb1.id    tb1.traad    tb1.indhold    tb2.id    tb2.traad    tb2.parent    tb2.author
------------------------------------------------------------------------------------------
Avatar billede zac Nybegynder
28. marts 2004 - 21:19 #6
Dit ex. skal lige ændres til dette, så er det helt fint:

tb1:
------------------------
id_tb1    traad    indhold
------------------------
1    1    bla bla
2    1    buh buh

tb2:
------------------------------------
id_tb2    traad    parent    author
------------------------------------
1    1    1    Jensen
2    1    2    Hansen

Select skulle - efter 'find' i body - blive til (lister over):

echo "$author skrev i tråd $thread (evt. i indlæg $parent):<br> $body<br>";

Hvis man søger på 'find' OG en bestemt author kan det sagtens lade sig gøre, men ellers?
Avatar billede htm Nybegynder
28. marts 2004 - 21:49 #7
Men som jeg ser din tabelopbygning og forstår dit problem, kan det ikke lade sig gøre.

Du har jo ikke noget der linker en tekst sammen med den aktuelle forfatter? eller forstår jeg dig ikke rigtigt?

Du har jo teksten stående i tb1 sammen med tråd ID'et.
Det tråd ID forekommer også i tb2 - Men her forekommer det mange gange. eller har trådID fra tb2 intet med tråd ID fra tb1 at gøre?
Avatar billede htm Nybegynder
28. marts 2004 - 21:51 #8
Eller måske - hvis parent i tb2 referer til ID i tb1 ?

så skal det være noget ala:

SELECT tb1.*, tb2.*
FROM tb1, tb2
WHERE tb1.indhold LIKE '%$find%' AND tb1.traad = tb2.traad AND tb2.parent = tb1.id
Avatar billede zac Nybegynder
30. marts 2004 - 10:04 #9
Jeg tror du har ret, det kan ikke lade sig gøre med denne opbygning - det synes jeg bare det kunne, der hvor jeg tog det fra!

Parent i tb2 refererer ikke til id i tb1.

Meeen det vil vel altid i en debat/ et forum, der registerer brugernes indlæg efterhånden som de kommer (id og indhold i tb1) være sådan, at rækkefølgen svarer til den for samme tråd i tb2 - tb2s rækker for en given tråd svarer til rækkerne i tb1.

Så det må kunne lade sig gøre at få tb1 id10, id11, id12, id13, id14 for tråd 4 til at passe med id - ja hvad, altid samme antal id i tb2? - enten tilsvarende id11...id14, eller id30...id34, i tb2.
Avatar billede htm Nybegynder
30. marts 2004 - 18:08 #10
Hvis der er link i mellem IDs kan det da lade sig gøre at linke mellem disse.


SELECT tb1.*, tb2.*
FROM tb1, tb2
WHERE tb1.indhold LIKE '%$find%' AND tb1.traad = tb2.traad AND tb1.id = tb2.id
Avatar billede zac Nybegynder
21. oktober 2005 - 00:17 #11
lukker spm. for tiden - undskyld forsinkelsen - vil gerne give dit point, htm
Avatar billede htm Nybegynder
21. oktober 2005 - 22:24 #12
svar
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
Computerworld tilbyder specialiserede kurser i database-management

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