gerelateerde producten zoeken

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Dennis WhoCares

Dennis WhoCares

04/02/2016 21:38:09
Quote Anchor link
Hi allemaal,

ik heb een tabel met producten, en een gerelateerde producten tabel.

gerelateerde producten is als volgt:
rel_id
rel_productid
rel_relatedto

Hoe kan ik nou in 1 query doen van 'SELECT * FROM products WHERE product_id = 1' waar ook tegelijk alle producten in staan waar deze relatedto is ?

(waarschijnlijk een beetje een beginners vraag?)
 
PHP hulp

PHP hulp

23/02/2025 00:49:57
 
Jan de Laet

Jan de Laet

05/02/2016 09:58:31
Quote Anchor link
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
SELECT * FRPM products o
  WHERE o.product_id = $product
JOIN
SELECT * FROM products r
  WHERE r.product_id IN (SELECT rel_relatedto FROM gerelateerde_producten WHERE rel_productid = $product)
ORDER BY ...


En vervang $product tweemaal door jouw productnummer
Gewijzigd op 05/02/2016 10:01:37 door Jan de Laet
 
Bo Ter Ham

Bo Ter Ham

05/02/2016 10:27:25
Quote Anchor link
@Jan de Laet, je bedoelt zeker een UNION i.p.v. een JOIN? Dan is het ook meteen logisch dat je de WHERE clause voor de JOIN hebt gezet.

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
SELECT id, name FROM products o
WHERE o.product_id = $product
UNION
SELECT id, name
FROM products r
WHERE r.product_id
IN (
    SELECT rel_relatedto
    FROM related_products
    WHERE rel_productid = $product
)
Gewijzigd op 05/02/2016 10:27:45 door Bo Ter Ham
 
Jan de Laet

Jan de Laet

05/02/2016 11:38:41
Quote Anchor link
Bo, natuurlijk bedoel ik UNION. Bedankt voor de correctie.
 
Ger van Steenderen
Tutorial mod

Ger van Steenderen

05/02/2016 17:29:25
Quote Anchor link
Ik zou dit met 2 afzonderlijke queries doen.
 
Dennis WhoCares

Dennis WhoCares

05/02/2016 17:55:01
Quote Anchor link
Hoi allemaal, bedankt voor de reacties!
Ik denk dat mn vraagstelling ook onduidelijk was..
Dit wordt voor n functie om gerelateerde producten te zoeken en alle gegevens zitten in products

ik neem aan dat ik de 1e where weg kan laten?

Dit is ook de reden waarom Ger het met 2 queries zou doen?
1 voor huisige product en andere voor gerelateerde producten?
 
Ger van Steenderen
Tutorial mod

Ger van Steenderen

05/02/2016 18:46:40
Quote Anchor link
Dat bedoelde ik inderdaad.
Voor gerelateerde producten krijg je dan deze query:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
SELECT
    p.id,
    p.title
FROM
    related_products r
JOIN
    products p
    ON r.rel_productid = p.id
WHERE
    r.rel_relatedto = 111111 /* $product */
 
Dennis WhoCares

Dennis WhoCares

05/02/2016 19:58:00
Quote Anchor link
<3 thanks!
Gewoon ter bevestiging:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
return $this->database->select('SELECT
    p.*
FROM
    dnshop_related_products r
JOIN
    dnshop_products p
    ON r.rel_related_prod_id = p.prod_id OR r.rel_prod_id = p.prod_id
WHERE
    (r.rel_related_prod_id = :productid OR rel_prod_id = :productid) AND p.prod_id <> :productid',array('productid' => $param));


Dit doet het wel (tenminste... met een paar enkele producten.. heb nog geen 'live' omgeving

Doe ik dit dan goed?

Op deze manier heb ik namelijk ook het volgende gemaakt:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
return $this->database->select('SELECT p.*,COUNT(r.rev_id) as revAmount,SUM(r.rev_score) as revTotal
                    FROM
                        dnshop_reviews r
                    JOIN
                        dnshop_products p
                        ON r.rev_prod_id = p.prod_id
                    WHERE p.prod_category = :category', array('category' => $param));

Maar dat werkt dan weer net niet.. Deze laat 1 producten in van :category, incl. totaal aantal reviews en score (van alle reviews bij elkaar).

(Ik weet het.. nooit * gebruiken in queries..) Komt dadelijk wel ;-)
Gewijzigd op 05/02/2016 21:13:24 door Dennis WhoCares
 



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.