[php/mysql] Niet gekoppelde producten in overzicht

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Mijn SQL kennis is beneden de maat, daarom hulp gewenst van een kenner :)

Ik 3 tabellen:
1. menu (menuid, omschr)
2. product (prodid, omschr, image, ... enz)
3. product_in_menu (pins_id, menuid, prodid)

Nu wil ik graag alle producten weergeven die niet gekoppeld zijn aan een menu. Dat kan nooit moeilijk zijn, maar hoe het moet ??? Dit moet zeker met een JOIN? Zo ja, daar heb ik helemaal geen kaas van gegeten 8)7

Acties:
  • 0 Henk 'm!

  • OZ-Gump
  • Registratie: November 2002
  • Laatst online: 14-05-2024

OZ-Gump

terug van weggeweest

Select * from product where product.prodid not in (Select product_in_menu.prodid from product_in_menu)

Zoiets?

My personal website


Acties:
  • 0 Henk 'm!

  • gorgi_19
  • Registratie: Mei 2002
  • Laatst online: 17:06

gorgi_19

Kruimeltjes zijn weer op :9

OZ-Gump schreef op 16 oktober 2003 @ 10:37:
Select * from product where product.prodid not in (Select product_in_menu.prodid from product_in_menu)

Zoiets?
MySQL ondersteunde toch geen subqueries? :?

Digitaal onderwijsmateriaal, leermateriaal voor hbo


Acties:
  • 0 Henk 'm!

  • OZ-Gump
  • Registratie: November 2002
  • Laatst online: 14-05-2024

OZ-Gump

terug van weggeweest

gorgi_19 schreef op 16 oktober 2003 @ 10:37:
[...]
MySQL ondersteunde toch geen subqueries? :?
Woepsie... even over MySQL heen gelezen :X
Alhoewel het natuurlijk wel kan bij MySQL 4.x (geloof ik). Anders zal er inderdaad een andere oplossing gezocht moeten worden.

Vraagje voor de TS dus: welke versie van MySQL draai je?

[ Voor 9% gewijzigd door OZ-Gump op 16-10-2003 10:41 ]

My personal website


Acties:
  • 0 Henk 'm!

  • r0bert
  • Registratie: September 2001
  • Laatst online: 30-07 02:32
Hij heeft het ook over SQL hoor..

Sorry, ik had alleen hierop gelet:
"Mijn SQL kennis is beneden de maat" :D

[ Voor 56% gewijzigd door r0bert op 16-10-2003 10:46 ]


Acties:
  • 0 Henk 'm!

Verwijderd

Waarom voeg je aan je product tabel niet de optie menuid toe en vraag je alles op waar menuid leeg is?

Acties:
  • 0 Henk 'm!

Verwijderd

r0bert schreef op 16 October 2003 @ 10:41:
Hij heeft het ook over SQL hoor..
Zie titel: [php/mysql] Niet gekoppelde producten in overzicht

Acties:
  • 0 Henk 'm!

  • gorgi_19
  • Registratie: Mei 2002
  • Laatst online: 17:06

gorgi_19

Kruimeltjes zijn weer op :9

r0bert schreef op 16 oktober 2003 @ 10:41:
Hij heeft het ook over SQL hoor..
Waarom zet hij in de topictitel dan MySQL?

Voor de TS:

Zie http://www.mysql.com/doc/en/ANSI_diff_Subqueries.html voor een paar voorbeelden.

[ Voor 23% gewijzigd door gorgi_19 op 16-10-2003 10:44 ]

Digitaal onderwijsmateriaal, leermateriaal voor hbo


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Wow, dat gaat snel :)

Ik draai MySQL 3.23.56
MySQL dus!

En voor zover ik weet ondersteunt die geen subqueries.

Een menuid opnemen in de producten tabel in deze situatie is niet handig, omdat 1 product in meerdere menu's kan voorkomen :)

Hoop dat de oplossing in zicht is :)

Acties:
  • 0 Henk 'm!

  • gorgi_19
  • Registratie: Mei 2002
  • Laatst online: 17:06

gorgi_19

Kruimeltjes zijn weer op :9

Verwijderd schreef op 16 oktober 2003 @ 10:47:
Hoop dat de oplossing in zicht is :)
Link al bekeken?

Digitaal onderwijsmateriaal, leermateriaal voor hbo


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Ben ik nu mee bezig, gaat voornamelijk over subqueries uit versie 4.x, maar er worden ook alternatieven genoemd die ik aan het uitpluizen ben.

Acties:
  • 0 Henk 'm!

Verwijderd

Verwijderd schreef op 16 oktober 2003 @ 10:47:
Wow, dat gaat snel :)

Ik draai MySQL 3.23.56
MySQL dus!

En voor zover ik weet ondersteunt die geen subqueries.

Een menuid opnemen in de producten tabel in deze situatie is niet handig, omdat 1 product in meerdere menu's kan voorkomen :)

Hoop dat de oplossing in zicht is :)
Als het om een admin gaat is een query extra niet zo erg dus wat je kan doen is een tweede query uitvoeren op het resultaat van de eerste. Hierbij kijk je dan of je prodid in je menu tabel voorkomt.

Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
SELECT product.* FROM product,product_in_menu WHERE product.prodid NOT IN product_in_menu.prodid;

Is dit iets dat zou kunnen werken? Vooral dat NOT IN, anders krijg ik alleen de producten die wel zijn gekoppeld aan een menu.

edit:

Dit werkt dus niet, maar zoiets moet toch kunnen?

[ Voor 15% gewijzigd door Verwijderd op 16-10-2003 11:02 ]


Acties:
  • 0 Henk 'm!

  • OZ-Gump
  • Registratie: November 2002
  • Laatst online: 14-05-2024

OZ-Gump

terug van weggeweest

Wat jij nu aangeeft is een subquery, maar dan zonder subquery. De link van gorgi_19 geeft je de mogelijkheden om een subquery-query om te bouwen naar een Join-query. Ga daarmee eens aan de slag om te kijken of je er uit komt.

My personal website


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Ik heb nu zoiets adh van die link, maar het werkt nog niet, ik ga nog verder tobben, als ik er niet uit kom post ik wel weer, ik zit iig op de goede weg nu. Thanks:

SELECT product.* FROM product,prod_in_menu
WHERE product.prodid != prod_in_menu.prodid;

Groetjes,
Hans

[ Voor 41% gewijzigd door Verwijderd op 16-10-2003 11:12 ]


Acties:
  • 0 Henk 'm!

  • zeroxcool
  • Registratie: Januari 2001
  • Laatst online: 04-09 19:14
SELECT product.*
FROM product, prod_in_menu
WHERE product.prodid = prod_in_menu.prodid
AND prod_in_menu.prodid IS NULL;

Kan ook en vind ik persoonlijk netter.

[ Voor 30% gewijzigd door zeroxcool op 16-10-2003 11:14 ]

zeroxcool.net - curity.eu


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
ZeRoXcOoL schreef op 16 October 2003 @ 11:12:
SELECT product.*
FROM product, prod_in_menu
WHERE product.prodid = prod_in_menu.prodid
AND prod_in_menu.prodid IS NULL;

Kan ook en vind ik persoonlijk netter.
Dit snap ik niet helemaal. Wat doe je precies met die Is NULL. Daar kijk je toch mee of een veld leeg is (NULL waarde bevat)??? Maar dat veld mag niet leeg zijn. In die koppeltabel MOET elk veld gevuld zijn.

SELECT product.*
FROM product, prod_in_menu
WHERE product.prodid = prod_in_menu.prodid

Die query werkt op zich wel, maar geeft het omgekeerde resultaat. Oftewel alle producten die WEL zijn gekoppeld aan een menu. Kun je die query niet reverse uitvoeren ofzo?

Acties:
  • 0 Henk 'm!

  • Gerco
  • Registratie: Mei 2000
  • Laatst online: 10-08 02:59

Gerco

Professional Newbie

ZeRoXcOoL:
Dat kan niet op die manier, want voor een produkt wat niet in het menu zit, zal geen product_in_menu record bestaan. Zoiets werkt (hopelijk) wel (mind the syntax, lang niet ge SQLed)
SQL:
1
2
3
SELECT procuct.prodid AS pid, product_in_menu.menuid AS mid
FROM product OUTER-JOIN product_in_menu ON product.prodid = product_in_menu.prodid
WHERE mid = NULL;

[ Voor 3% gewijzigd door Gerco op 16-10-2003 11:29 ]

- "Als ik zou willen dat je het begreep, legde ik het wel beter uit!" | All number systems are base 10!


Acties:
  • 0 Henk 'm!

  • zeroxcool
  • Registratie: Januari 2001
  • Laatst online: 04-09 19:14
Mmm, heb gisteren nog de constructie van me eigen gebruikt, dat werkte prima. Want een niets resultaat is in 'het vage' MySQL volgens mij ook gewoon NULL. Maar dat moet je aan de MySQL goeroes vragen ;).

Die outer join mag ook gewoon op de manier van de TS...

[ Voor 16% gewijzigd door zeroxcool op 16-10-2003 16:43 ]

zeroxcool.net - curity.eu


Acties:
  • 0 Henk 'm!

  • djluc
  • Registratie: Oktober 2002
  • Laatst online: 16:51
ZeRoXcOoL schreef op 16 October 2003 @ 16:41:
Mmm, heb gisteren nog de constructie van me eigen gebruikt, dat werkte prima. Want een niets resultaat is in 'het vage' MySQL volgens mij ook gewoon NULL. Maar dat moet je aan de MySQL goeroes vragen ;).
Daar heb je inderdaad gelijk in, een left join bijvoorbeeld zal null als resultaatveld geven als er in de rechtertabel geen gerelateerde waarde is.

Acties:
  • 0 Henk 'm!

  • zeroxcool
  • Registratie: Januari 2001
  • Laatst online: 04-09 19:14
Hier heb ik het een tijd geleden gevonden:
http://www.mysql.com/doc/en/ANSI_diff_Subqueries.html

Lezen vanaf 'Can be rewritten as'.

zeroxcool.net - curity.eu


Acties:
  • 0 Henk 'm!

  • gorgi_19
  • Registratie: Mei 2002
  • Laatst online: 17:06

gorgi_19

Kruimeltjes zijn weer op :9

ZeRoXcOoL schreef op 16 October 2003 @ 17:08:
Hier heb ik het een tijd geleden gevonden:
http://www.mysql.com/doc/en/ANSI_diff_Subqueries.html

Lezen vanaf 'Can be rewritten as'.
* gorgi_19 fluistert heel zacht iets over [rml]gorgi_19 in "[ php/mysql] Niet gekoppelde producten in"[/rml] ;)

Digitaal onderwijsmateriaal, leermateriaal voor hbo


Acties:
  • 0 Henk 'm!

  • drm
  • Registratie: Februari 2001
  • Laatst online: 09-06 13:31

drm

f0pc0dert

Als je dan toch aan het lezen slaat kun je net zo goed ook even het stukje over JOINS lezen wat in de P&W FAQ onder 'SQL' staat.

Music is the pleasure the human mind experiences from counting without being aware that it is counting
~ Gottfried Leibniz


Acties:
  • 0 Henk 'm!

  • zeroxcool
  • Registratie: Januari 2001
  • Laatst online: 04-09 19:14
En * zeroxcool weet even niets te zeggen :z ;)

[ Voor 7% gewijzigd door zeroxcool op 16-10-2003 17:32 ]

zeroxcool.net - curity.eu


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Mooi, het is gelukt dankzij jullie hulp. Thanks, dit is het geworden:

SELECT product.* FROM product
LEFT JOIN prod_in_menu
ON product.prodid=prod_in_menu.prodid
WHERE prod_in_menu.prodid IS NULL";

Groetjes, Hans
Pagina: 1