Avatar billede _k Nybegynder
26. januar 2003 - 14:16 Der er 8 kommentarer og
1 løsning

SQL

Jeg har en SQL steng som ser sådan ud (der arbejdes udelukkende i tabellen answers):

SELECT libraryNum FROM answers WHERE questionNum = ".$row["questionNum"]." AND answer = $x AND NOT (questionNum = 75 AND answer = 1)

Det der drilller er den sidste parantes. Jeg vil gerne have alle libraryNum's som ikke indeholder questionNum 75 OG answer 1. Men kan jeg overhovedet gøre det på denne måde?

Overvejer om det er muligt at lave en SELECT-statement mere, som eksplicit går ind og hiver fat i det enkelte libraryNum og tjekker om det opfylder kriterierne. Ved blot ikke hvordan syntaksen så kommer til at se ud?
Avatar billede arne_v Ekspert
26. januar 2003 - 14:50 #1
Jeg har sikkert misfortsået noget, men skal du ikke bare
erstatte din AND i den sidste parantes med en OR ?
Avatar billede _k Nybegynder
26. januar 2003 - 14:54 #2
Nej, for questionNum og answer er indbyrdes afhængige. Det betyder noget i retning af: dem der har svaret på spørgsmål 75 med et ja (1).

Men prøv friskt igen :o)
Avatar billede arne_v Ekspert
26. januar 2003 - 14:57 #3
Hvad er så problemet med den sidste parentes ?

For så ser den da rigtig ud !
Avatar billede _k Nybegynder
26. januar 2003 - 15:13 #4
Problemet er ikke syntaks. MySQL kan satens tygge den igennem. Problemet er semantisk. Den gør ikke det den burde gøre.

Jeg vil gerne have den til at vælge de rækker for et givent spørgsmål ($row["questionNum"]) som indeholder et bestemt svar $x. Rækken skal dog ikke tælles med, hvis der er svaret ja (answer = 1) til spørgsmål 75 (questionNum = 75).
SQL-strengen bliver benyttet i en løkke, som kører samtlige svarmuligheder for en række spørgsmål igennem.

Håber det uddybede problemet godt nok?
Avatar billede arne_v Ekspert
26. januar 2003 - 15:18 #5
OK.

Så er vi ovre i:

SELECT libraryNum FROM answers WHERE questionNum = ".$row["questionNum"]." AND answer = $x AND libraryNum NOT IN (SELECT libraryNum FROM answers
WHERE questionNum = 75 AND answer = 1)
Avatar billede _k Nybegynder
26. januar 2003 - 15:49 #6
Tror vi er på vej i den rigtige retning! Men når jeg kører strengen, får jeg følgende fejl:

You have an error in your SQL syntax near 'SELECT libraryNum FROM answers WHERE questionNum = 75 AND answer = 1) LIMIT 0, 3' at line 1

Kender ikke noget til "NOT IN" - kan det være den det er galt med?
Avatar billede arne_v Ekspert
26. januar 2003 - 16:03 #7
Hm.

Det er ellers ret standard SQL.

Men MYSQL kan tilsyneladend eikke.

Se f.eks.:
  http://www.mysql.com/doc/en/ANSI_diff_Sub-selects.html
Avatar billede arne_v Ekspert
26. januar 2003 - 16:08 #8
Kan du prøve med:

SELECT libraryNum FROM answers WHERE questionNum = ".$row["questionNum"]." AND answer = $x AND libraryNum NOT EXISTS (SELECT * FROM answers answers2 as
WHERE questionNum = 75 AND answer = 1 AND answers.libraryNum = answers2.libraryNum)
Avatar billede _k Nybegynder
04. februar 2003 - 17:48 #9
Sorry forsinkeltes, havde helt glemt svaret.... Fik løst problemet med INNER JOIN i stedet for - men du skal have point for din konstruktive kritik...
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
Computerworld tilbyder specialiserede kurser i database-management

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