webForumDet fria alternativet

INNER JOIN problem

14 svar · 736 visningar · startad av streetrobban

streetrobbanMedlem sedan jan. 20011 184 inlägg
#1

Hej,

Jag har en tabell som heter "sns_produkter_biltillbehör" där all information om produkterna sparas. I "sns_produkter_biltillbehör" finns det fält med ID-nummer som länkas med INNER JOIN till andra tabeller.

Tex. "sns_produkter_biltillbehör.id_bilmärke" hämtas från "sns_bilmärken", så att jag får fram ett bilmärke.

Samma sak med "sns_bilmodeller" och "sns_kategorier".

När man vill spara en produkt i sin kundvagn lägger användaren till "sns_produkter_biltillbehör.id" i en ny tabell som heter "sns_ordrar". Sedan när man visar kundvagnen vill jag hämta all information om produkten man lagt till från "sns_produkter_billtillbehör". Men självklart måste man hämta produkten med rätt ID-nummer från "sns_ordrar". Hur gör man det?

Här är koden som hämtar en produkt från "sns_produkter_biltillbehör". Jag vill länka samman "sns_produkter_biltillbehör.id" med "sns_ordrar.produkterID".

	$get = mysql_query("SELECT sns_bilmärken.id, sns_bilmärken.bilmärke, sns_bilmodeller.id, sns_bilmodeller.bilmodell, sns_kategorier_biltillbehör.id, sns_kategorier_biltillbehör.kategorinamn, sns_produkter_biltillbehör.id AS produkt_id, sns_produkter_biltillbehör.produktnamn, sns_produkter_biltillbehör.id_bilmodell, sns_produkter_biltillbehör.id_bilmärke, sns_produkter_biltillbehör.bild, sns_produkter_biltillbehör.beskrivning, sns_produkter_biltillbehör.pris, sns_produkter_biltillbehör.id_kategori, sns_produkter_biltillbehör.tid, sns_produkter_biltillbehör.datum FROM sns_produkter_biltillbehör
	INNER JOIN sns_kategorier_biltillbehör ON sns_produkter_biltillbehör.id_kategori = sns_kategorier_biltillbehör.id
	INNER JOIN sns_bilmodeller ON sns_produkter_biltillbehör.id_bilmodell = sns_bilmodeller.id
	INNER JOIN sns_bilmärken ON sns_produkter_biltillbehör.id_bilmärke = sns_bilmärken.id LIMIT 1");
NiklassonMedlem sedan nov. 2000823 inlägg
#2

Flyttad från PHP..

LarsGMedlem sedan dec. 200012 465 inlägg
#3

Det är väl bara att lägga till

SELECT bm.id, 
       bm.bilmärke, 
       bmo.id, 
       bmo.bilmodell, 
       kb.id, 
       kb.kategorinamn, 
       pb.id AS produkt_id, 
       pb.produktnamn, 
       pb.id_bilmodell, 
       pb.id_bilmärke, 
       pb.bild, 
       pb.beskrivning, 
       pb.pris, 
       pb.id_kategori, 
       pb.tid, 
       pb.datum 
  FROM sns_produkter_biltillbehör pb
    INNER JOIN sns_kategorier_biltillbehör kb ON pb.id_kategori = kb.id
    INNER JOIN sns_bilmodeller bmo ON spb.id_bilmodell = bmo.id
    INNER JOIN sns_bilmärken bm ON pb.id_bilmärke = bm.id 
  where pb.id in 
   (select produkterID
      from sns_ordrar
     where kundID = 4711)

vad är problemet?

streetrobbanMedlem sedan jan. 20011 184 inlägg
#4

Det funkar inte LarsG.

	$get = mysql_query("SELECT
	bm.id, 
	bm.bilmärke,
	bmo.id,
	bmo.bilmodell,
	kb.id,
	kb.kategorinamn,
	pb.id AS produkt_id,
	pb.produktnamn,
	pb.id_bilmodell,
	pb.id_bilmärke,
	pb.bild,
	pb.beskrivning,
	pb.pris,
	pb.id_kategori,
	pb.tid,
	pb.datum
  	FROM sns_produkter_biltillbehör pb
    	INNER JOIN sns_kategorier_biltillbehör kb ON pb.id_kategori = kb.id
    	INNER JOIN sns_bilmodeller bmo ON pb.id_bilmodell = bmo.id
    	INNER JOIN sns_bilmärken bm ON pb.id_bilmärke = bm.id 
  	WHERE pb.id IN (SELECT produktID FROM sns_ordrar WHERE id_användare = '$användarID' & kundKlar = '0')");
emissionMedlem sedan dec. 19996 095 inlägg
#5

Vad är det som inte fungerar? Vad händer?

streetrobbanMedlem sedan jan. 20011 184 inlägg
#6

Den sista kodsnutten "IN (SELECT..." kan inte hämta några "produktID" från sns_ordrar.

Fel:

INNER JOIN sns_bilmärken bm ON pb.id_bilmärke = bm.id
      WHERE pb.id IN (SELECT produktID FROM sns_ordrar WHERE id_användare = '$användarID' & kundKlar = '0')");

Funkar:

INNER JOIN sns_bilmärken bm ON pb.id_bilmärke = bm.id
      WHERE pb.id = '158'");

Felmeddelande:

Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource in /home/kunder/kund.php on line 100
emissionMedlem sedan dec. 19996 095 inlägg
#7

AND passar nog bättre än &-tecken... :)

streetrobbanMedlem sedan jan. 20011 184 inlägg
#8

Jag har provat AND tecken, jag fick tips av en snubbe igår att det kanske är SQL-versionen som inte stöder IN? MySQL 4.0.21-log körs. Kan det stämma?

@ndersMedlem sedan juni 200026 914 inlägg
#9

Jo, den versionen av MySQL stödjer IN. Däremot inte subqueries.
Kan du inte uppgradera?

streetrobbanMedlem sedan jan. 20011 184 inlägg
#10

Jag kör mot ett webbhotell som heter Crystone. Jag får väl maila dom och fråga...

streetrobbanMedlem sedan jan. 20011 184 inlägg
#11

Ok, nu har jag mailat. Men vilken version är den senaste, eller vilken version funkar Subselects med?

Jesper TMedlem sedan nov. 20017 058 inlägg
#12

Tror att 4.22 fixar subselects

emissionMedlem sedan dec. 19996 095 inlägg
#13

Fast egentligen borde det inte behövas

"SELECT
    bm.id,
    bm.bilmärke,
    bmo.id,
    bmo.bilmodell,
    kb.id,
    kb.kategorinamn,
    pb.id AS produkt_id,
    pb.produktnamn,
    pb.id_bilmodell,
    pb.id_bilmärke,
    pb.bild,
    pb.beskrivning,
    pb.pris,
    pb.id_kategori,
    pb.tid,
    pb.datum
      FROM sns_produkter_biltillbehör pb
        INNER JOIN sns_kategorier_biltillbehör kb ON pb.id_kategori = kb.id
        INNER JOIN sns_bilmodeller bmo ON pb.id_bilmodell = bmo.id
        INNER JOIN sns_bilmärken bm ON pb.id_bilmärke = bm.id
        INNER JOIN sns_ordrar o ON (pb.id=o.produktID AND o.id_användare = '$användarID' AND o.kundKlar = '0')"
@ndersMedlem sedan juni 200026 914 inlägg
#14

streetrobban skrev:

Ok, nu har jag mailat. Men vilken version är den senaste, eller vilken version funkar Subselects med?

Från och med version 4.1 stöds subqueries.

streetrobbanMedlem sedan jan. 20011 184 inlägg
#15

wow emission, tack för hjälpen! nu funkar det!!

Genererad på 383 ms · cache AV · v20260730165559-full.f96bc7eb