Avatar billede jgrantzau Nybegynder
21. januar 2003 - 22:48 Der er 14 kommentarer og
1 løsning

Select - join m.m.

Hej !

Jeg har en mysql database med tre tabeller:

(bruger bare eksempler her)

varer
:::::::::::::::::::
vare_id
vare_tekst


bestillinger
::::::::::::::::::
bestilling_id
vare_id
bruger_id


brugere
::::::::::::::::::
bruger_id
bruger_navn


Nu vil jeg gerne liste alle varer (med navn og id) som en eller anden bruger IKKE har bestilt.
ud af 10 varer har brugeren måske bestilt 3, og jeg vil nu liste de sidste 7.

bruger_id bliver sendt med som querystring og gemt således:
bruger_id = request.querystring("bruger_id")
(fungerer fint...)

ALTSÅ: Hent fra varer hvor vare_id IKKE findes i (bestillinger hvor bruger er bruger_id)

kan ikke helt gennemskue hvordan jeg skal JOINE de to....

forståelig?

mvh JG
Avatar billede _darkstar_ Nybegynder
21. januar 2003 - 22:51 #1
SELECT * FROM varer WHERE vare_id NOT IN (
  SELECT vare_id FROM bestillinger WHERE bruger_id = <brugerid>)
Avatar billede jgrantzau Nybegynder
21. januar 2003 - 23:03 #2
jeg får fejlen :

bruger_id er blevet til således:

ordre.asp?id=2
:::::::

bruger_id = request.QueryString("bruger_id")

SELECT * FROM varer WHERE vare_id NOT IN (
  SELECT vare_id FROM bestillinger WHERE bruger_id = ' " & bruger_id &  " ')

have an error in your SQL syntax near 'SELECT vare_id FROM bestillinger WHERE bruger_id = '2')' at line 1
Avatar billede morw Nybegynder
22. januar 2003 - 00:07 #3
darkstar_> Ingen subselects i mysql

SELECT varer.vare_id, varer.vare_tekst
FROM varer
LEFT JOIN bestillinger ON bestillinger.vare_id = varer.vare_id
WHERE bestillinger.bruger_id != '" & bruger_id &  "'


=
Avatar billede morw Nybegynder
22. januar 2003 - 00:16 #4
Ellers prøv lige denne:

SELECT varer.vare_id, varer.vare_tekst
FROM varer
LEFT JOIN bestillinger ON bestillinger.vare_id = varer.vare_id AND bestillinger.bruger_id != '" & bruger_id &  "'
WHERE bestillinger.bruger_id IS NULL
Avatar billede jgrantzau Nybegynder
22. januar 2003 - 00:27 #5
morw  -> den første duer ikke ihvertfald - får 16 resultater hvor jeg skulle have 6... :)
Avatar billede jgrantzau Nybegynder
22. januar 2003 - 00:32 #6
nu får jeg 3 poster (skulle stadig have 6 ud af 11).

nogle af dem jeg får er rigtige, andre forkerte (altså ER allerede bestilt..)
Avatar billede morw Nybegynder
22. januar 2003 - 00:50 #7
SELECT DISTINCT varer.vare_id, varer.vare_tekst
FROM varer
LEFT JOIN bestillinger ON bestillinger.vare_id = varer.vare_id
WHERE bestillinger.bruger_id != '" & bruger_id &  "'
Avatar billede jgrantzau Nybegynder
22. januar 2003 - 11:06 #8
er det ikke det samme som du skrev længere oppe?
Avatar billede morw Nybegynder
22. januar 2003 - 11:22 #9
DISTINCT
Avatar billede jgrantzau Nybegynder
22. januar 2003 - 11:28 #10
ah - sorry! prøver lige !
Avatar billede jgrantzau Nybegynder
22. januar 2003 - 11:39 #11
Microsoft OLE DB Provider for ODBC Drivers error '80040e09'
[TCX][MyODBC]You have an error in your SQL syntax near 'WHERE bestillinger.bruger_id != '2'' at line 1
Avatar billede jgrantzau Nybegynder
22. januar 2003 - 11:44 #12
der er vist noget galt med den:  bruger_id = '2' - mærkeligt - det virker fint når jeg henter fra BRUGER tabellen.

select * from bruger where bruger_id = '" & bruger_id & "'

virker ikke i BESTILLING  af en eller anden grund..
Avatar billede jgrantzau Nybegynder
22. januar 2003 - 12:54 #13
?
Avatar billede _darkstar_ Nybegynder
27. maj 2003 - 11:50 #14
Hvis du sætter plinger omkring et tal, går det galt. Prøv at fjerne dem.

bruger_id = '" & bruger_id & "' --> bruger_id = " & bruger_id & "
Avatar billede jgrantzau Nybegynder
14. juli 2004 - 13:54 #15
-
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