24. september 2002 - 13:57Der er
8 kommentarer og 3 løsninger
SELECT problem
har et problem med at få valgt de rigtige data'er ud af 2 af mine tabeller og har efterhånden prøvet alt.. men intet virker helt som det skal.. desværre :(
så jeg håber at der er en venlig sjæl som kan hjælpe mig med at få det løst :)
skal have lavet en "ignore" funktion som jeg skal bruge til en skole opgave... jeg har 3 tabeller til det...
det skal så fungere så ledes at f.eks BrugerID nr 1 skal hente alle beskeder der er til ham, men fravælge de beskeder fra de personer som han har sat på ignore
håber at min forklaring er god nok, ellers må i/du jo lige sige til
Her er mit forsøg på en select. Du må selv sørge for at tilrette syntaksen, men så har du da en ide. Select from tbl_besked where col_modtager_id = BrugerID and col_afsender_id not in (Select col_ignorebruger_id from tbl_ignore_bruger where col_bruger_id = BrugerID)
SELECT be.* FROM tbl_besked be LEFT JOIN tbl_ignore_bruger ig ON be.col_modtager_id=ig.col_bruger_id WHERE be.col_bruger_id=1234 And ig.col_ignorebruger Is Null;
>proaccess: Ups, det har du da ret i, at MySQL ikke gør (måske i version 4) Jeg måtte lige kigge i manualen, og der er det beskrevet præcis som du skriver.
1.7.4.1 SubSELECTs MySQL Server currently only supports nested queries of the form INSERT ... SELECT ... and REPLACE ... SELECT .... You can, however, use the function IN() in other contexts. Subselects are currently being implemented in the 4.1 development tree.
Meanwhile, you can often rewrite the query without a subselect:
SELECT * FROM table1 WHERE id IN (SELECT id FROM table2); This can be rewritten as:
SELECT table1.* FROM table1,table2 WHERE table1.id=table2.id; The queries:
SELECT * FROM table1 WHERE id NOT IN (SELECT id FROM table2); SELECT * FROM table1 WHERE NOT EXISTS (SELECT id FROM table2 WHERE table1.id=table2.id); Can be rewritten as:
SELECT table1.* FROM table1 LEFT JOIN table2 ON table1.id=table2.id WHERE table2.id IS NULL;
det ser jo ud til at virke næsten som det skal.... der er bare et lille problem...
SELECT be.* FROM tbl_besked be LEFT JOIN tbl_ignore_bruger ig ON be.col_modtager_id=ig.col_bruger_id WHERE be.col_bruger_id=1234 And ig.col_ignorebruger Is Null;
vælger alt hvad Bruger nr 1234 har skrevet... og ikke hvad alle andre har skrevet... :(
så derfor prøvet jeg at sætte WHERE be.col_bruger_id != 1234 istedet for...
hvilket resulteret i at den ikk fravælger de BrugerID'er som bruger nr 1234 har sat på ignore :(
SELECT be.* FROM tbl_besked be LEFT JOIN tbl_ignore_bruger ig ON be.col_afsender_id=ig.col_bruger_id WHERE be.col_modtager_id_id=1234 And ig.col_ignorebruger Is Null;
SELECT be.* , us.col_brugernavn FROM tbl_besked be , tbl_bruger us
LEFT JOIN tbl_ignore_bruger ig ON be.col_bruger_id=ig.col_ignorebruger_id AND ig.col_bruger_id = 1234
WHERE be.col_bruger_id != 1234 And be.col_bruger_id = us.col_bruger_id And ig.col_ignorebruger_id Is Null;
men der er stadig et problem.... for de person bruger nr 1234 har sat på ignore... de kan godt modtager beskeder fra 1234 :(
men jeg takker mange gange for den hjælp jeg har fået indtil videre... håber at en af jer lige kan klare den sidste del... så vil jeg være en glad kartoffel :)
Bruger nr 1 skal ikke kunne modtage beskeder fra bruger nr 2 hvis han er sat på ignore... Det er sådan SELECT'en fungere nu :)
MEN den tager ikk hensyn til at bruger nr 2 godt kan modtage beskeder fra bruger nr 1.... hvilket ikke er fedt :(
problemet kunne nok løsses ved at begge sat hinanden på ignore... sådan nr 1 sat nr på ingore og bruger nr 2 satte nr 1 på ignore... men jeg vil helst gerne undgå gentagende data
ser ud til at jeg har fået løst den sidste del selv :)
så jeg takker mange gange for det hjælp jeg har fået....
Synes godt om
Ny brugerNybegynder
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.