Avatar billede straszek Praktikant
21. marts 2003 - 14:39 Der er 11 kommentarer og
1 løsning

kombinere tabeller

Den her kan jeg ikke lige gennemskue:

Jeg har tre tabeller

1:user
id_user, usernavn

2: events
id_event, eventtitel

3: tilmelding
id_user, id_event, status

Hvor id_user og id_event i tabel 3, kommer fra de to andre tabeller.

Nu var det så jeg gerne ville lave en select der kun fandt de events som brugeren endnu ikke har tilmeldt sig til!

Hvordan skal den kringles?
Avatar billede mjl Nybegynder
21. marts 2003 - 14:46 #1
Måske...

SELECT * FROM events WHERE id_event != 'et_eller_andet'
Avatar billede arnvig Nybegynder
21. marts 2003 - 14:46 #2
du kan bruge "not exists"
Avatar billede mjl Nybegynder
21. marts 2003 - 14:48 #3
Sorry...

SELECT * FROM tilmelding WHERE id_user != 'et_eller_andet'
Avatar billede arnvig Nybegynder
21. marts 2003 - 14:51 #4
Select *
from event e
where not exists (Select *
                  from tilmelding t
                  where t.id_user = <userid>
                    and t.id_event = e.id_event)
Avatar billede arnvig Nybegynder
21. marts 2003 - 14:51 #5
hov.. det var et svar
Avatar billede straszek Praktikant
21. marts 2003 - 14:57 #6
arnvig ->

Det ser spændende ud, men jeg mener ikke mysql understøtter subselects ?
Avatar billede arnvig Nybegynder
21. marts 2003 - 15:00 #7
åååh-ja, det er rigtigt.
Så er der vist desværre ikke nogen nem løsning, beklager.
Avatar billede straszek Praktikant
21. marts 2003 - 15:01 #8
ER der en svær løsning? :-)


Søren
Avatar billede broegaard Nybegynder
22. marts 2003 - 16:37 #9
prøv denne.
Der er to kald til databasen.
bruger id'et bliver sat på første linie.
//------------------------
$id_user = 2;
$foresp = mysql_query("SELECT id_event FROM tilmelding WHERE id_user = $id_user");
if (mysql_num_rows($foresp) > 0 ) {
    $sql = 'WHERE ';
    while($row = mysql_fetch_array($foresp)) {
        if ($sql != 'WHERE ') $sql.= " AND";
        $sql.= " id_event != " .$row['id_event'];
    }
}
else {
    $sql = '';
}
$foresp2 = mysql_query("SELECT id_event, eventtitel FROM events $sql");
while($row2 = mysql_fetch_array($foresp2)) {
    echo $row2['id_event'] . ": " . $row2['eventtitel'] . "<br>";
}
Avatar billede straszek Praktikant
22. marts 2003 - 17:07 #10
Jeg fandt efter lidt søgning på nettet en anden løsninger, se nedenstående:

mysql_query("create temporary table _not_assigned select arr_id from
kalenderreadx where kalenderreadx.user_id = $row[id]");

mysql_query("create temporary table _not_assigned select arr_id from
kalenderreadx where kalenderreadx.user_id = $row[id]");

for så herefter at lave en left join _not_assigned on id på den oprindelige select.


Søren
Avatar billede arnvig Nybegynder
24. marts 2003 - 09:49 #11
er det nødvendigt at lave querien 2 gange ?
Avatar billede straszek Praktikant
24. marts 2003 - 10:53 #12
Det er en skrive fejl, den skal kun køres en gang.

Søren
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