03. august 2005 - 14:12Der er
19 kommentarer og 1 løsning
mySQL - søge i 2 tabeller, til 1 liste
Hejsa.. Jeg er igang med en lille opgave hvor jeg skal lave et stemme system...
I tabel 1 (liste) er der nogle navne i kolonne Navn.. navn1 navn2 navn3
I kolonne 2 er der et felt der hedder vaelger, hvor eksv. navn2 er noteret i...
Personen der er logget ind (navn2 = session("navn")) må ikke se sig selv på den stemmeliste og han må heller ikke kunne se dem som han har stemt på før (altså session("navn") = vote.vaelger)
Det første med at han ikke må se sig selv på listen er ikke problemet... Men at få fra soteret dem han har stemt på driller lidt... Jeg har prøvet med nedenstående kode, men her kommer der intet frem på listen...
rsSQLstem = "SELECT * FROM liste, vote WHERE iste.navn <> '"&session("navn")&"' AND liste.valgslut >= CURDATE() AND vote.vaelger <> '"&session("navn")&"'"
hvorfor bruger du wildcards på session(navn). Hvis du har en bruger der hedder beef12, ville den komme til at sortere andre brugere fra f.eks. hvis der en der hedder beef123 eller mybeef12? Dvs jeg foreslår at du fjerner & fra din query
SELECT * FROM liste L INNER JOIN vote V ON L.navn = V.valeger WHERE L.navn <> '" & session("navn") & "' AND L.valgslut >= CURDATE() AND V.vaelger <> '" & session("navn") & "' AND V.navn NOT IN (SELECT vs.navn FROM vote WHERE v.vaelger = '" & session("navn") & "')
sorry, jeg glemte at vote i den subquery skulle have et alias. Det skal naturligvis være:
(SELECT vs.navn FROM vote vs WHERE v.vaelger = '" & session("navn") & "')
jeg vil dog lige sige at jeg ikke er sikker på at syntaksen holder ifht. MySQL, da jeg ikke har erfaring med denne DBMS... men jeg håber idéen stadig kan bruges om ikke andet :)
SELECT * FROM liste L INNER JOIN vote V ON L.navn = V.vaelger WHERE L.navn <> '" & session("navn") & "' AND L.valgslut >= CURDATE() AND V.vaelger <> '" & session("navn") & "' AND V.navn NOT IN (SELECT vs.navn FROM vote vs WHERE v.vaelger = '" & session("navn") & "')"
Skal lige høre... Feltet: Navn er i tabel: Liste (L)... Passer det så at der står V.navn et sted.. og også at den bliver selected som vs.navn i vote (V) ??
Håber ikke at jeg stiller for dumme spørgsmål.. Men jeg er ny i JOIN
BTW.. Jeg får denne fejl...
Microsoft OLE DB Provider for ODBC Drivers error '80040e14'
You have an error in your SQL syntax near 'SELECT vs.navn FROM vote vs WHERE v.vaelger = 'navn2')' at line 1
Hmmm... jeg har vel fortolket mig frem til at der også skulle være en reference til den man har stemt på og så kaldt denne reference for navn, men det kan jeg forstå var en fejl :)
Hvordan markerer du hvem der er stemt på (vote.vaelger er den som afgiver stemmen, korrekt)?
Det kan være du skal have AS mellem tabelnavn og alias (det skal man i access, men ikke i SQL Server)...
SELECT * FROM liste AS L INNER JOIN vote AS V ON L.navn = V.vaelger WHERE L.navn <> '" & session("navn") & "' AND L.valgslut >= CURDATE() AND V.vaelger <> '" & session("navn") & "' AND V.denvalgte NOT IN (SELECT vs.denvalgte FROM vote AS vs WHERE v.vaelger = '" & session("navn") & "')"
Hvis du har en SQL-syntaks manual til mySQL, kunne du evt. slå tabel alias op for at se hvilken syntaks du skal bruge - hvis altså det er det. En anden syntaks du skal kigge på er IN, for jeg er ikke sikker på om det er
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.