[英]MySQL, PHP - WHERE clause
我創建如下查詢,但 WHERE 部分有問題:
$get_products = "SELECT P.*, C.`category_name`,
GROUP_CONCAT(`category_name` SEPARATOR ', ')
AS cat
FROM `products` P
NATURAL JOIN `categories` C
NATURAL JOIN `product_to_categories`
WHERE FIND_IN_SET(`category_id`, '$answers')
GROUP BY `product_name`
ORDER BY count(C.`category_id`) DESC";
所以如果我有產品,即: DB Fiddle
APPLE屬於類別: FRUIT , GREEN , ROUND
WHEEL所屬類別: MACHINES , BLACK , ROUND
BANANA屬於類別: FRUIT , YELLOW , CUBOID
PHONE屬於類別: ELECTRONICS , BLACK , CUBOID
TOMATO屬於類別: ROUND , VEGETABLE , RED
PIZZA屬於類別: ROUND , COLORFUL , DISH
和select類別:圓形、水果、綠色、機器、蔬菜
感謝 FIND_IN_SET 我將收到:
+--------------+---------------------+
| product_name | cat |
+--------------+---------------------+
| APPLE | FRUIT, GREEN, ROUND |
+--------------+---------------------+
| TOMATO | VEGETABLE, ROUND |
+--------------+---------------------+
| WHEEL | MACHINES, ROUND |
+--------------+---------------------+
| BANANA | FRUIT |
+--------------+---------------------+
| PIZZA | ROUND |
+--------------+---------------------+
現在我正在嘗試設置強制類別之一,所以它應該像這樣工作:
我正在選擇ROUND 、 FRUIT 、 GREEN 、 MACHINES 、 VEGETABLE類別的產品。
假設ROUND是主要(強制性)類別,我應該收到:
+--------------+---------------------+ | product_name | cat | +--------------+---------------------+ | APPLE | FRUIT, GREEN, ROUND | +--------------+---------------------+ | TOMATO | VEGETABLE, ROUND | +--------------+---------------------+ | WHEEL | ROUND, MACHINES. | +--------------+---------------------+
因此,從屬於ROUND類別的所有產品中,我也在尋找FRUIT 、 GREEN 、 MACHINES 、 VEGETABLES 。
我試過這個條款:
WHERE (category_id IN ('$main_category')
AND (FIND_IN_SET(category_id, '$answers')));
它幾乎可以工作了。 幾乎是因為我失去了ORDER BY count
,它還返回屬於ROUND但不屬於任何其他類別的PIZZA 。
謝謝!
CREATE TABLE products (
`product_id` INTEGER NOT NULL PRIMARY KEY,
`product_name` VARCHAR(31)
);
INSERT INTO products
(`product_id`, `product_name`)
VALUES
('1', 'APPLE'),
('2', 'WHEEL'),
('3', 'BANANA'),
('4', 'PHONE'),
('5', 'TOMATO'),
('6', 'PIZZA');
CREATE TABLE categories (
`category_id` INTEGER,
`category_name` VARCHAR(31)
);
INSERT INTO categories
(`category_id`, `category_name`)
VALUES
('1', 'FRUIT'),
('2', 'GREEN'),
('3', 'ROUND'),
('4', 'MACHINES'),
('5', 'BLACK'),
('6', 'YELLOW'),
('7', 'CUBOID'),
('8', 'ELECTRONICS'),
('9', 'DISH'),
('10', 'VEGETABLE'),
('11', 'RED'),
('12', 'COLORFUL');
CREATE TABLE product_to_categories (
`relation_ID` INTEGER,
`product_ID` INTEGER,
`category_ID` INTEGER
);
INSERT INTO product_to_categories
(`relation_ID`, `product_ID`, `category_ID`)
VALUES
('1', '1', '1'),
('2', '1', '2'),
('3', '1', '3'),
('4', '2', '4'),
('5', '2', '5'),
('6', '2', '3'),
('7', '3', '1'),
('8', '3', '6'),
('9', '3', '7'),
('10', '4', '5'),
('11', '4', '8'),
('12', '5', '3'),
('13', '5', '10'),
('14', '5', '11'),
('15', '6', '3'),
('16', '6', '9'),
('17', '6', '12');
例如:
SELECT p.*
, GROUP_CONCAT(COALESCE(c2.category_name,c1.category_name)) name
FROM products p
JOIN product_to_categories pc1
ON pc1.product_id = p.product_id
JOIN categories c1
ON c1.category_id = pc1.category_id
JOIN product_to_categories pc2
ON pc2.product_id = pc1.product_id
JOIN categories c2
ON c2.category_id = pc2.category_id
WHERE c1.category_name = 'round'
AND c2.category_name IN ('ROUND','FRUIT', 'GREEN', 'MACHINES', 'VEGETABLE')
GROUP
BY p.product_id
HAVING COUNT(*) > 1 ;
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.