Pereiti prie turinio

Nepavyksta suformuoti SQL eilutės


Rekomenduojami pranešimai

Sveiki.

 

Yra 4 lentelės:

 

products:

productid | forsale
75350 | Y
26894 | Y

 

 

shops:

productid | amount | type
75350 | 0 | S
75350 | 0 | XS
75350 | 0 | XL
26894 | 1 | S
26894 | 0 |  XL 

 

classes:

productid | classid
75350 | 7504
26894 | 7206

 

options:

classid
7206

 

Reikia rasti produktus, kurie turi "forsale"=Y, o lentelėje "shops" - visi "amount"=0.

Priedo, turi surasti rezultatus, kurių "classes.classid" reikšmės nėra lentelėje "options".

Kitaip sakant, rodyti, jei prekė forsale, tačiau kiekiai visur 0.

 

Tai iš šių dviejų, turėtų rezultate rodyti tik productid = 75350.

 

Kažkas paprasto, bet nepavyksta dabar.

 

Ačiū.

Redagavo DeSigneR
Nuoroda į pranešimą
Dalintis kituose puslapiuose

Trink lauk tuomet total:

 

 

SELECT s.productid, SUM(s.amount) AS total
FROM shops s
LEFT JOIN products p ON s.productid = p.productid
WHERE p.forsale = 'Y'
GROUP BY s.productid
HAVING total = 0

Redagavo Aistis
Nuoroda į pranešimą
Dalintis kituose puslapiuose

Trink lauk tuomet total:

 

 

SELECT s.productid, SUM(s.amount) AS total
FROM shops s
LEFT JOIN products p ON s.productid = p.productid
WHERE p.forsale = 'Y'
GROUP BY s.productid
HAVING total = 0

 

Dėkui, suveikė. Bet pasirodo to neužtenka, reikia dar kai ką patikrinti.

 

 

classes:

productid | classid
75350 | 7504
26894 | 7206

 

options:

classid
7206

 

Reikia patikrinti, ar tas "classes" lentelėje esantis "classid" neegzistuoja lentelėje "options".

 

Mėginau kažką tokio:

SELECT s.productid, SUM(s.amount) AS total, (SELECT COUNT(*) FROM classes WHERE classid = c.classid) AS amount
FROM shops s
LEFT JOIN products p ON s.productid = p.productid
LEFT JOIN classes c ON c.productid = p.productid
WHERE p.forsale = 'Y' AND amount > 0
GROUP BY s.productid
HAVING total = 0

 

But no success..

 

EDIT: buvau šiek tiek suklydęs kode, pasitaisiau.

Redagavo DeSigneR
Nuoroda į pranešimą
Dalintis kituose puslapiuose

SELECT s.productid, SUM(s.amount) AS total
FROM shops s
LEFT JOIN products p ON s.productid = p.productid
LEFT JOIN classes c ON s.productid = c.productid
INNER JOIN options o ON c.classid = o.classid
WHERE p.forsale = 'Y'
GROUP BY s.productid
HAVING total = 0

 

Nuoroda į pranešimą
Dalintis kituose puslapiuose

SELECT s.productid, SUM(s.amount) AS total
FROM shops s
LEFT JOIN products p ON s.productid = p.productid
LEFT JOIN classes c ON s.productid = c.productid
INNER JOIN options o ON c.classid = o.classid
WHERE p.forsale = 'Y'
GROUP BY s.productid
HAVING total = 0

 

 

Velnias, naktis veikia.

 

Reikia, kad tas "classid" neegizstuotų toj lentelėj. T.y. kad lentelėje "options" įrašo su c.classid reikšme nebūtų.

Nuoroda į pranešimą
Dalintis kituose puslapiuose

Velnias, naktis veikia.

 

Reikia, kad tas "classid" neegizstuotų toj lentelėj. T.y. kad lentelėje "options" įrašo su c.classid reikšme nebūtų.

 

 

SELECT s.productid, SUM(s.amount) AS total
FROM shops s
LEFT JOIN products p ON s.productid = p.productid
LEFT JOIN classes c ON s.productid = c.productid
LEFT JOIN options o ON c.classid = o.classid
WHERE p.forsale = 'Y' AND o.classid IS NULL
GROUP BY s.productid
HAVING total = 0

Redagavo Aistis
Nuoroda į pranešimą
Dalintis kituose puslapiuose

SELECT s.productid, SUM(s.amount) AS total
FROM shops s
LEFT JOIN products p ON s.productid = p.productid
LEFT JOIN classes c ON s.productid = c.productid
LEFT JOIN options o ON c.classid = o.classid
WHERE p.forsale = 'Y' AND o.classid IS NULL
GROUP BY s.productid
HAVING total = 0

 

Dar labiau apmažėjo rezultatų, bet vis dar ne galutinis variantas. Turėtų nerodyti tų rezultatų, kurių "classes" classid nėra tarp "options" lentelėje, tačiau rodo.

 

EDIT: kaip suprantu yra daug daugiau tokių, kurių classid yra ir "options" lentelėje, tačiau rodo ne juos visus (o turėtų išvis nerodyti). Tai gal kažkas su tais JOIN, nebesimąsto visai.

Redagavo DeSigneR
Nuoroda į pranešimą
Dalintis kituose puslapiuose

Velnias, naktis veikia.

 

Reikia, kad tas "classid" neegizstuotų toj lentelėj. T.y. kad lentelėje "options" įrašo su c.classid reikšme nebūtų.

 

 

Dar labiau apmažėjo rezultatų, bet vis dar ne galutinis variantas. Turėtų nerodyti tų rezultatų, kurių "classes" classid nėra tarp "options" lentelėje, tačiau rodo.

 

Apsispręsk :) Geriau nupasakok kokius rezultatus nori ištraukti, o ko ne tai ko neištraukti.

Redagavo Aistis
Nuoroda į pranešimą
Dalintis kituose puslapiuose

Apsispręsk :) Geriau nupasakok kokius rezultatus nori ištraukti, o ko ne tai ko neištraukti.

 

Aha, painiojuos ir pats. Dabar viskas būtų gerai, tik štai kas:

 

 

lentelėje classes yra classid.

LEFT JOIN classes c ON s.productid = c.productid 

Jei lentelėje options yra tokia pati classid reikšmė, tada to neištraukti

Įsivaizdavimui:

if (mysql_num_rows(mysql_query("SELECT * FROM options WHERE classid=c.classid")) > 0){
Štai ko reikia - kad šitų rezultatų nerodytų. Jei vistiek bus neaišku, pamėginsiu viską suformuluot ryt iš naujo.
} else {
Rodom šitą rezultatą.

}

 

EDIT: pagaliau pataisiau teisingai. Dėkui už pagalbą, bet jau pats nebesuprantu ką rašau, rytoj patikrinsiu, jei neveiks, ieškosiu toliau, nes sunku nupasakoti ko jau čia man ir reikia.

Redagavo DeSigneR
Nuoroda į pranešimą
Dalintis kituose puslapiuose

Hmmmmm, nu jei gerai suprantu tai kaip ir tas turėjo veikti:

 

 

SELECT s.productid, SUM(s.amount) AS total
FROM shops s
LEFT JOIN products p ON s.productid = p.productid
LEFT JOIN classes c ON s.productid = c.productid
LEFT JOIN options o ON c.classid = o.classid
WHERE p.forsale = 'Y' AND o.classid IS NULL
GROUP BY s.productid
HAVING total = 0

 

Jei ne, tai pabandyk atvirkščiai :D

 

SELECT s.productid, SUM(s.amount) AS total
FROM shops s
LEFT JOIN products p ON s.productid = p.productid
LEFT JOIN classes c ON s.productid = c.productid
LEFT JOIN options o ON c.classid = o.classid
WHERE p.forsale = 'Y' AND o.classid IS NOT NULL
GROUP BY s.productid
HAVING total = 0

Redagavo Aistis
Nuoroda į pranešimą
Dalintis kituose puslapiuose

Hmmmmm, nu jei gerai suprantu tai kaip ir tas turėjo veikti:

 

 

SELECT s.productid, SUM(s.amount) AS total
FROM shops s
LEFT JOIN products p ON s.productid = p.productid
LEFT JOIN classes c ON s.productid = c.productid
LEFT JOIN options o ON c.classid = o.classid
WHERE p.forsale = 'Y' AND o.classid IS NULL
GROUP BY s.productid
HAVING total = 0

 

Jei ne, tai pabandyk atvirkščiai :D

 

SELECT s.productid, SUM(s.amount) AS total
FROM shops s
LEFT JOIN products p ON s.productid = p.productid
LEFT JOIN classes c ON s.productid = c.productid
LEFT JOIN options o ON c.classid = o.classid
WHERE p.forsale = 'Y' AND o.classid IS NOT NULL
GROUP BY s.productid
HAVING total = 0

 

Būtent taip ir reikėjo (ne atvirkščiai :D)! Ačiū labai :)

Nuoroda į pranešimą
Dalintis kituose puslapiuose

Prisijunkite prie diskusijos

Jūs galite rašyti dabar, o registruotis vėliau. Jeigu turite paskyrą, prisijunkite dabar, kad rašytumėte iš savo paskyros.

Svečias
Parašykite atsakymą...

×   Įdėta kaip raiškusis tekstas.   Atkurti formatavimą

  Only 75 emoji are allowed.

×   Nuorodos turinys įdėtas automatiškai.   Rodyti kaip įprastą nuorodą

×   Jūsų anksčiau įrašytas turinys buvo atkurtas.   Išvalyti redaktorių

×   You cannot paste images directly. Upload or insert images from URL.

Įkraunama...
  • Dabar naršo   0 narių

    Nei vienas registruotas narys šiuo metu nežiūri šio puslapio.

  • Prisijunk prie bendruomenės dabar!

    Uždarbis.lt nariai domisi verslo, IT ir asmeninio tobulėjimo temomis, kartu sprendžia problemas, dalinasi žiniomis ir idėjomis, sutinka būsimus verslo partnerius ir dalyvauja gyvuose susitikimuose.

    Užsiregistruok dabar ir galėsi:

    ✔️ Dalyvauti diskusijose;

    ✔️ Kurti naujas temas;

    ✔️ Rašyti atsakymus;

    ✔️ Vertinti kitų žmonių pranešimus;

    ✔️ Susisiekti su bet kuriuo nariu asmeniškai;

    ✔️ Naudotis tamsia dizaino versija;

    ir dar daugiau.

    Registracija trunka ~30 sek. ir yra visiškai nemokama.

  • Naujausios temos

  • Karštos temos

×
×
  • Pasirinkite naujai kuriamo turinio tipą...