mysql probleempje ( in 2 tabellen tegelijk zoeken )

Pagina: 1
Acties:

  • redpen
  • Registratie: Maart 2003
  • Laatst online: 06-02 22:27
ik zit met een probleempje ik heb 2 tabellen met in de een de producten en in de andere de maten

nu wil ik kunnen zoeken op product nummer ( wat in beide staat ) maar ook op product naam ( staat alleen in de eerste ) nu weet ik dat dit te doen is met een join laat het zo zijn dat wij mysql 3 op de server hebben en niet de versie 4 waar het bij ondersteund wordt.


de query:

SELECT
`producten`.`id`,
`producten`.`naam`,
`producten`.`product_nummer`,
`maten`.`product_nummer`,
`maten`.`product_id`
FROM
`winkel_producten` AS `producten`,
`winkel_productopties` AS `maten`
WHERE
(
`producten`.`naam` LIKE '%nach%'
OR
`producten`.`product_nummer` LIKE '%nach%'
OR
`maten`.`product_nummer` LIKE '%nach%'
)
AND `maten`.`product_id` = `producten`.`id`
AND `producten`.`gepubliceerd`='1'
GROUP BY `producten`.`id`
LIMIT 10

deze geeft dan geen resultaat terug in phpmyadmin

[ Voor 3% gewijzigd door redpen op 11-10-2006 11:29 ]

beter 10 servers in de lucht dan 1 op de grond


  • UniCache2
  • Registratie: Januari 2001
  • Laatst online: 09-01 09:09
Volgens mij kun je dit:

code:
1
2
OR
`maten`.`product_nummer` LIKE '%nach%'


weg laten, want dat staat daar boven ook al toch?

Verder lijkt het prima te zijn, je koppelt de twee tabellen al:

AND `maten`.`product_id` = `producten`.`id`

[ Voor 35% gewijzigd door UniCache2 op 11-10-2006 11:32 ]


  • Voutloos
  • Registratie: Januari 2002
  • Niet online
redpen schreef op woensdag 11 oktober 2006 @ 11:28:
nu weet ik dat dit te doen is met een join laat het zo zijn dat wij mysql 3 op de server hebben en niet de versie 4 waar het bij ondersteund wordt.
Sorry, maar je zal toch wat meer je (my)sql basics op moeten halen, zoals join syntax (met gebruikmaken van keywords als ON en USING), voordat je onterecht de conclusie trekt de mysql 3 niet kan joinen. Subqueries kunnen inderdaad pas nav 4.1.nogiets, maar hier heb je echt geen subquery voor nodig.

Overigens, als een mysql versie een sql feature nog niet begrijpt, krijg je doorgaans een dikke syntax error ipv een lege resultset. ;)

[ Voor 7% gewijzigd door Voutloos op 11-10-2006 11:37 ]

{signature}


  • Dido
  • Registratie: Maart 2002
  • Nu online

Dido

heforshe

Begrijp ik nou goed dat product_id hetzelfde kan zijn, terwijl de productnummers verschillen?

Zo ja, wat versta je dan onder een productnummer, zo nee, waarom gebruik je dan een ID en een nummer voor een product :?

Sterker nog, als je productnummer in je tweede tabel hetzelfde is (en wat je anders met productnummer bedoelt moet je maar uitleggen, want dan snap ik het niet), dan hoef je helemaal niets te joinen, want je haalt verder alleen maar velden op uit je eerste tabel.

edit: en die group by slaat als een tang op een varken, omdat je helemaal geen aggregate functies gebruikt.

[ Voor 48% gewijzigd door Dido op 11-10-2006 11:39 ]

Wat betekent mijn avatar?


  • André
  • Registratie: Maart 2002
  • Laatst online: 11-02 14:19

André

Analytics dude

Ik verplaats hem naar Programming

  • redpen
  • Registratie: Maart 2003
  • Laatst online: 06-02 22:27
ik zal even de database erbij zetten:


tabel 1

het product

id << product_id
naam
product_nummer

de maten

product_id << id
product_nummer

hier staan nog wat gegevens bij maar is niet belangrijk

het is namelijk zo een product kan meerdere maten hebben en per maat een ander product nummer en hoeveelheid

deze moeten via de zoekmachine vindbaar zijn dus iemand kan zoeken op een product nummer van een bepaalde maat en die krijgen ze dan ook te zien

beter 10 servers in de lucht dan 1 op de grond


  • Dido
  • Registratie: Maart 2002
  • Nu online

Dido

heforshe

mgoed. Wat stelt Productnummer in tabel 1 dan voor? Want er kunnen dus verschillende productnummers aan 1 product_id hangen.

Als het echt iets anders is, geef het dan ook een andere naam. ;)

Dan nog hoef je trouwens je maten.product_id niet in je select op te nemen (of je moet er warm van worden dat je het twee keer ziet), en slaat je Group by nog steeds nergens op.

code:
1
2
3
4
SELECT P.ID, P.naam, P.productnummer, M.productnummer
  FROM tabel1 P join tabel2 M on P.ID = M.Produc_ID
 WHERE P.productnummer LIKE '%iets%'
    OR M.productnummer LIKE '%iets%'

Zou dan wel wat op moeten leveren, lijkt me. Maar nogmaals, als het ene productnummer iets anders is dan het andere, verin er dan een andere naam voor ;)

En ik ben heel benieuwd wat je met die group by wilt bereiken.

Wat betekent mijn avatar?


  • redpen
  • Registratie: Maart 2003
  • Laatst online: 06-02 22:27
die eerste product nummer is voor als er geen maten aan het product vast zitten ( dat is ook mogelijk )

en ik zie dat er in je query een join zit opgenomen die zal waarschijnlijk niet werken omdat er mysql 3 op draait

beter 10 servers in de lucht dan 1 op de grond


  • Voutloos
  • Registratie: Januari 2002
  • Niet online
redpen schreef op woensdag 11 oktober 2006 @ 13:16:
en ik zie dat er in je query een join zit opgenomen die zal waarschijnlijk niet werken omdat er mysql 3 op draait
Nogmaals: kunnen joinen is de belangrijkste feature in een relationele database en mysql 3 kan dat dan ook.

{signature}


  • ripexx
  • Registratie: Juli 2002
  • Laatst online: 11-02 22:38

ripexx

bibs

redpen schreef op woensdag 11 oktober 2006 @ 13:16:
die eerste product nummer is voor als er geen maten aan het product vast zitten ( dat is ook mogelijk )

en ik zie dat er in je query een join zit opgenomen die zal waarschijnlijk niet werken omdat er mysql 3 op draait
Nee dat ligt niet aan MySQL 3. Waarschijnlijk is de query niet goed, je legt te veel voorwaarden en daardoor krijg je geen resultaat. Je krijgt namelijk geen resultset terug. Ik zie je nu al meerdere keren in dit topic roepen dat MySQl 3 dit niet zou kunnen? Waar staat dat in het manual? Indien je bijvoorbeeld een subquery uitvoert op MySQL 3 dan krijgje een syntaxerror.

buit is binnen sukkel


  • P_de_B
  • Registratie: Juli 2003
  • Niet online
redpen schreef op woensdag 11 oktober 2006 @ 13:16:
en ik zie dat er in je query een join zit opgenomen die zal waarschijnlijk niet werken omdat er mysql 3 op draait
Wat denk je dat jij doet in de query in de TS?

Oops! Google Chrome could not find www.rijks%20museum.nl


  • Dido
  • Registratie: Maart 2002
  • Nu online

Dido

heforshe

redpen schreef op woensdag 11 oktober 2006 @ 13:16:
die eerste product nummer is voor als er geen maten aan het product vast zitten ( dat is ook mogelijk )

en ik zie dat er in je query een join zit opgenomen die zal waarschijnlijk niet werken omdat er mysql 3 op draait
Is al een paar keer gezegd, maar een join kan prima.

Subqueries is een ander verhaal. Als joinen niet kon, zou MySQL 3 nooit, en door helemaal niemand gebruikt zijn of worden ;)

Maar goed, wat geeft mijn query terug?

Wat betekent mijn avatar?

Pagina: 1