25. september 2003 - 15:57Der er
10 kommentarer og 1 løsning
Problemer med subqueries
Hej
Jeg har en tabel der indeholder en mængde brugeres svar på nogle spørgsmål. Brugerne kan vælge flere end et svar, og der kan således være flere svar pr. bruger.
Jeg ville lave et query, der tæller antallet af folk der har valgt svaret "1", og som OGSÅ har indsendt svaret "3".
Jeg har følgende query som jeg kalder <q>
SELECT `users`.`id` FROM `users`,`answers` WHERE `answers`.`user` = `users`.`id` AND `answers`.`answer` = \'3\' );
som returnerer 90 rækker (hvor svaret på et stillet spørgsmål var 3). Dette query virker som det skal.
Jeg har et andet query, som skulle finde det endelige antal af svar:
SELECT COUNT(`id`) AS `num` FROM `answers` WHERE `answers`.`answer` = \'1\' AND `answers`.`user` = ( <q> ); ');
For overskuelighedens skyld har jeg her skrevet <q>, men i virkeligheden har jeg indsat det første query på <q>s plads. Med andre ord et query i et query (en subquery).
Men det virker ikke :)
You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near 'SELECT `users`.`id` FROM `users
Hvad kan der være galt? Skal jeg overhovedet bruge subqueries? Tænker jeg helt galt lige nu? :)
Pointen var at så vidt jeg kan se er id et felt i users tabellsn ikke i answers.
Og jeg forstår ikke hvad du mener med "tælle alle felter" ?
Man tæller rækker. Og forskellen på COUNT(*) og COUNT(felt) er at den sidste ikke tager rækker hvor feltet er NULL med. Og den første er sommetider hurtigere fordi den er nemmere at optimere.
SELECT COUNT(`id`) AS `num` FROM `answers` WHERE `answers`.`answer` = '1' AND `answers`.`user` IN ( <q> ); ');
Altså "IN" i stedet for "=" Når du har en subquery returnerer den en række poster. Feltet `answers`.`user` kan ikke være lig dem alle sammen. Men det kan være i blandt dem.
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.