[PHP & MYSQL] Select query

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • marqram
  • Registratie: Januari 2008
  • Laatst online: 12-08 23:57
Hey tweakers!
Ik heb hier een probleempje, waar ik me op het moment even blind op staar hoe ik het het best kan doen. Ik zal even de omgeven schetsen:

Ik heb in mijn DB(database) een tabel met producten. Deze producten hebben verschillende opties, bijvoorbeeld leverancier, of tijdsduur. Deze opties staan in een tabel met opties. Voor elke optie bestaan verschillende waarden, zoals verschillende leveranciers. Deze staan in de tabel values. Een koppeltabel geeft aan welke values bij welke opties horen. Een 2e koppeltabel geeft dan aan welke values bij een bepaald product horen.

Ik wil graag(dmv van 3 <select>-vakjes) kunnen zoeken op 3 specifieke, vooraf bepaalde opties. Dus bijvoorbeeld alle producten van een leverancier, of van een leverancier en een bepaalde tijdsduur. Echter na wat knoeien kom ik er niet uit.

Op één optie zoeken is geen probleem: ik zoek eerst alle product id's die gekoppeld zijn aan die optie, en zoek dan per product alle andere opties bij het product om deze te laten zien.

Echter wanneer ik op meerdere opties wil zoeken(en alleen wil tonen wat dus ook 100% matched met wat gezocht wordt), zoek ik dus in dezelfde koppeltabel op 'WHERE value=1 AND value=2' ...dit geeft dus geen resultaten.

Ik heb het idee dat de oplossing simpel is, maar ik kom er niet op. Dus als iemand een helpende hand kan bieden, graag!

Acties:
  • 0 Henk 'm!

  • bigbeng
  • Registratie: Augustus 2000
  • Laatst online: 26-11-2021
Dat heet OR... ik ga er even vanuit dat value niet tegelijktijdig de waarde 1 en 2 moeten hebben.

Acties:
  • 0 Henk 'm!

  • remco_k
  • Registratie: April 2002
  • Laatst online: 15:38

remco_k

een cassettebandje was genoeg

marqram schreef op maandag 16 juni 2008 @ 13:16:
'WHERE value=1 AND value=2' ...dit geeft dus geen resultaten.
Logisch, value kan niet 1 en 2 gelijkertijd zijn.
Hij kan wel 1 OF 2 gelijkertijd zijn:

OR is je keyword, zoals hierboven ook word gezegd.

Alles kan stuk.


Acties:
  • 0 Henk 'm!

  • Johnny
  • Registratie: December 2001
  • Laatst online: 14:39

Johnny

ondergewaardeerde internetguru

Let er bij het gebruik van OR in combinatie met AND wel op dat je haakjes gebruikt op de juiste plaatsen.

SQL:
1
SELECT * FROM table WHERE (value=1 OR value=2) AND id=3


Als je meer dan een enkele OR voor hetzelfde veld hebt kun je ook gebruik maken van IN:

SQL:
1
SELECT * FROM table WHERE value IN (1,2) AND id=3

Aan de inhoud van de bovenstaande tekst kunnen geen rechten worden ontleend, tenzij dit expliciet in dit bericht is verwoord.


Acties:
  • 0 Henk 'm!

  • marqram
  • Registratie: Januari 2008
  • Laatst online: 12-08 23:57
bigbeng schreef op maandag 16 juni 2008 @ 13:18:
Dat heet OR... ik ga er even vanuit dat value niet tegelijktijdig de waarde 1 en 2 moeten hebben.
Ja, maar hoe doe ik dat als ik wiil zoeken op value X voor leverancier EN value Y voor tijdsduur?


edit: Vorige post nog niet gelezen, ik zal even kijken of het daar in zit
edit2: Nu wel gelezen, maar lost volgens mij mijn probleem niet op.

[ Voor 19% gewijzigd door marqram op 16-06-2008 13:31 ]


Acties:
  • 0 Henk 'm!

  • TeeDee
  • Registratie: Februari 2001
  • Laatst online: 20-09 23:58

TeeDee

CQB 241

marqram schreef op maandag 16 juni 2008 @ 13:28:
[...]


Ja, maar hoe doe ik dat als ik wiil zoeken op value X voor leverancier EN value Y voor tijdsduur?


edit: Vorige post nog niet gelezen, ik zal even kijken of het daar in zit
edit2: Nu wel gelezen, maar lost volgens mij mijn probleem niet op.
Wat is je query nu dan?
SQL:
1
SELECT * FROM table WHERE leverancier=x and tijdsduur=y
Is imo een prima valide query.

Heart..pumps blood.Has nothing to do with emotion! Bored


Acties:
  • 0 Henk 'm!

  • remco_k
  • Registratie: April 2002
  • Laatst online: 15:38

remco_k

een cassettebandje was genoeg

marqram schreef op maandag 16 juni 2008 @ 13:28:
[...]
edit2: Nu wel gelezen, maar lost volgens mij mijn probleem niet op.
En nu?
Moeten wij nu gokken wat je fout doet? :+

Kom even met meer info; tabbel structuur en voorbeeld inhoud van tabellen en de relevante querie(s)waarmee je aan het stoeien bent.

Alles kan stuk.


Acties:
  • 0 Henk 'm!

  • _js_
  • Registratie: Oktober 2002
  • Laatst online: 18-08 21:31
Waarschijnlijk wil je iets als
SELECT ...
FROM ...
WHERE id IN (SELECT productid FROM opties WHERE optie1)
AND id IN (SELECT procductid FROM opties WHERE optie2)

Acties:
  • 0 Henk 'm!

  • Voutloos
  • Registratie: Januari 2002
  • Niet online
Ja, laten we met z'n allen queries roepen, terwijl de TS eerst maar uberhaupt nog een sql tutorialtje mag doen.

{signature}


Acties:
  • 0 Henk 'm!

  • MueR
  • Registratie: Januari 2004
  • Laatst online: 14:53

MueR

Admin Tweakers Discord

is niet lief

Je bent toch zeker wel bekend met de basis van WHERE ? Selecteren op 2 variabelen moet toch wel lukken dan?

Anyone who gets in between me and my morning coffee should be insecure.


Acties:
  • 0 Henk 'm!

  • Janoz
  • Registratie: Oktober 2000
  • Laatst online: 02:21

Janoz

Moderator Devschuur®

!litemod

Het probleem is dat de topic starter een zogenaamde 'database in database' structuur heeft. Hij wil records selecteren op basis van het gekoppeld zijn met meerdere records in een andere tabel.

De meest simpele manier is om de opties tabel 3x te joinen. Per optie 1 join. Dan kan wel gewoon met 'and' gewerkt worden. Er zijn wel andere manieren, maar dan kom je al snel uit bij lastige queries met having en count waarbij je ook nog eens moet garanderen dat een optie maar maximaal 1x aan een product zit.

Ken Thompson's famous line from V6 UNIX is equaly applicable to this post:
'You are not expected to understand this'

Pagina: 1