WN

WN (https://www.wn.se/forum/index.php)
-   Serversidans teknologier (https://www.wn.se/forum/forumdisplay.php?f=4)
-   -   Hjälp med mySQL (https://www.wn.se/forum/showthread.php?t=1042737)

Lando 2010-06-30 16:34

Hjälp med mySQL
 
Hej alla!

Tre tabeller:
users (Användare)
products (Prylar)
orders (Beställningar)

Jag vill kunna dölja en produkt för en viss användare om denne köpt den tidigare. Tex:

SELECT * FROM products

LEFT JOIN users ON users.user_id = orders.order_user
LEFT JOIN orders ON orders.order_prod=products.prod_id

WHERE
users.user_id ='' AND
orders.order_id =''

LIMIT 10

//Så skriver den bara ut produkter användaren inte köpt

MEN mitt exempel hämtar ut alla orders och joinar produkterna och användarna på den.

Någon som kan hjälpa?

Tack på förhand!

Conny Westh 2010-07-01 00:24

Prova det här :

Kod:

SELECT *
FROM Products
WHERE prod_id NOT IN (SELECT prod_id FROM orders WHERE user_id = '101010'  )


Lando 2010-07-01 00:47

Nej det har jag inte provat. Ska ge det ett försök! Tack!

Lando 2010-07-01 14:04

Funkade perfekt. Tack! :)

terbon 2010-07-06 14:33

Tänkte tipsa om att istället för att använda en subquery, att du använder LEFT OUTER JOIN för att optimera. I ditt fall kommer detta bli någonting i stil med:

Kod:

SELECT DISTINCT `products`.`product_id` , `products`.`product_name`
    FROM `products`
    LEFT OUTER JOIN `orders` ON
      `orders`.`product_id` = `products`.`product_id`
      AND `orders`.`user_id` = 1
    WHERE `orders`.`user_id` IS NULL

Detta är effektivare då du slipper ha en subquery som körs för varje selectad rad.

Finns lite förklaring på http://searchoracle.techtarget.com/a...XISTS-subquery


Alla tider är GMT +2. Klockan är nu 12:15.

Programvara från: vBulletin® Version 3.8.2
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Svensk översättning av: Anders Pettersson