Avatar billede budda Nybegynder
28. november 2005 - 19:17 Der er 9 kommentarer og
1 løsning

Joine 2 tabeller sA man finder ud af hvad det ikke skal være

Jeg har 2 tabeller.
1. Med emner:
s_emner
  e_id
  e_titel
  e_parentid <- Skal være 0 ellers skal det heller ikke vises

2. Med vis skal ikke vises.
s_visikke
  vi_id
  vi_user <- bruger hentet med $_SESSION[userid]
  vi_type <- skal kun hente dem med type 12.
  vi_emne <- Det e_id der ikke skal vises.

Det jeg gerne vil er at man automatisk kun henter dem man ønsker at se og dermed ikke regner de andre med.
Avatar billede Slettet bruger
28. november 2005 - 19:24 #1
Muligvis

SELECT e_id, e_titel FROM s_emner
WHERE e_parentid = 0
  AND e_id NOT IN (
    SELECT vi_emne FROM s_visikke
    WHERE vi_user='{$_SESSION['userid']}'
      AND vi_type = 12
  )
Avatar billede budda Nybegynder
28. november 2005 - 19:47 #2
#1064 - 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 *  FROM s_visikke  WHERE vi_user LIKE '1'  AND
Avatar billede pidgeot Nybegynder
28. november 2005 - 19:52 #3
Nu står der jo så SELECT vi_emne, ikke SELECT * - men måske du kører MySQL 4.0, der ikke understøtter subselects?
Avatar billede budda Nybegynder
29. november 2005 - 10:30 #4
ja 4.0.26

Kan man så ikke gøre det på en anden måde??
Avatar billede Slettet bruger
29. november 2005 - 10:44 #5
Jo. Prøv med

SELECT e_id, e_titel
FROM s_emner
LEFT OUTER JOIN s_visikke ON s_emner.e_id = s_visikke.vi_emne
WHERE e_parentid = 0
  AND vi_emne IS NULL
  AND vi_type = 12
  AND vi_user = '{$_SESSION['userid']}'

Og for en ordens skyld skal jeg lige sige, at det er generelt en god ide specifikt at bede om de felter, man ønsker at trække ud, og dermed ikke bruge * til sin select.
Avatar billede Slettet bruger
29. november 2005 - 10:47 #6
Kommer lige til at tænke på, at kontrollen af vi_emne og vi_type nok skal laves med HAVING i stedet for WHERE.
Avatar billede Slettet bruger
29. november 2005 - 10:52 #7
Vrøvl, de skal bare flyttes op som join-betingelse:

SELECT e_id, e_titel
FROM s_emner
LEFT OUTER JOIN s_visikke
  ON  s_emner.e_id = s_visikke.vi_emne
  AND vi_type = 12
  AND vi_user = '{$_SESSION['userid']}'
WHERE e_parentid = 0
  AND vi_emne IS NULL
Avatar billede budda Nybegynder
29. november 2005 - 21:49 #8
Det virker tak.
Smid du bare et svar :)
Avatar billede Slettet bruger
30. november 2005 - 00:13 #9
Det var heldigt, at der ikke var en af dem, der sad bag mig, der opdagede det vrøvl, jeg skrev om HAVING. Det var nemlig midt i mine databasetimer ;-)
Avatar billede budda Nybegynder
30. november 2005 - 18:54 #10
Hehe nice. Ja ville jo ikke være optimalt.
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