11. juni 2003 - 19:44Der er
14 kommentarer og 1 løsning
Join måske? Eller bare alm. select!
Jeg har følgende tabeller:
table1: - id - navn
table2: - id - nummer - status
table3: - table2id (referenceid til tabel2) - table1id (referenceid til tabel1)
jeg vil gerne udtrække: alle de numre fra table2 hvis id er repræsenteret i table3 (table2id) OG har status = '1' af dem skal det kun være de table3.table1id som er = '5' skal grouperes efter nummer.
Det smager lidt af: select table2.nummer FROM table2, table1 WHERE table2.id = table3.table2id AND table2.status = '1' AND table3.table1id = '5' GROUP BY table2.nummer
men dette giver ikke det rigtige resultat. Jeg har også prøvet med en left join men også uden held. Jeg er tvivl om rækkefølgen af ANDs og om der skal være parenteser om osv. osv. Jeg kunne godt bruge en uddybende forklarring til svaret :)
Jeg får for mange! status er enum ('0', '1') og id er heltal. OBS: table3.table1id = '5' <- denne sætning bliver til: table3.table1id = 5 OR table3.table1id = 6 OR table3.table1id = 7 skal der så parentes rundt om den?
SELECT t2.* FROM t2, t3 WHERE t2.status = 1 AND t3.tabel2id = t2.id AND (t3.tabel1id = 5 or t3.tabel1id = 6 or t3.tabel1id = 7) ORDER BY t2.nummer
eller:
SELECT t2.nummer,COUNT(*) FROM t2, t3 WHERE t2.status = 1 AND t3.tabel2id = t2.id AND (t3.tabel1id = 5 or t3.tabel1id = 6 or t3.tabel1id = 7) GROUP BY t2.nummer
nu har jeg vidst fat i noget, det er det der enumfelt der er underligt. Det opfører sig helt omvendt! Faktum er at jeg har to statusfelter, og hvis jeg vælger status 1 så får jeg alle dem som har status 0. Men hvis jeg vælger status 0 så får jeg intet. Skal jeg bare lave felttypen om til int? (jeg tester alligevel på det indsatte)
Kan man med fordel omskrive den til noget med en join? Eller er det det bedste man kan gøre her? (og vil du have point på du lige smide et svar)
Dette er den valgte! : SELECT t2.* FROM t2, t3 WHERE t2.status = 1 AND t3.tabel2id = t2.id AND (t3.tabel1id = 5 or t3.tabel1id = 6 or t3.tabel1id = 7) ORDER BY t2.nummer
Jeg kan ikke se nogen fordel ved at bruge join (medmindre der er bedre performnace, hvilket jeg ikke kender MySQL godt nok til at kunne udtale mig om).
Det vil i så fald være:
SELECT t2.* FROM t2 JOIN t3 ON t3.tabel2id = t2.id WHERE t2.status = 1 AND (t3.tabel1id = 5 or t3.tabel1id = 6 or t3.tabel1id = 7) ORDER BY t2.nummer
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.