我在一个看似简单的搜索脚本中遇到了一些问题。我有以下MySQL表结构:
id_product | name_product | has_choice | choice_id
2 Coca-Cola 1 0
3 Fanta 0 2//the id_product of Coca-Cola
4 Sprite 0 2//the id_product of Coca-Cola
在内连接(包括连接)后我想要实现的是:
id_product | name_product | has_choice | choice_id
3 Coca-Cola of Fanta 0 2
4 Coca-Cola of Sprite 0 2
注意产品的ID是pre-veveious choice id。此外,主要产品(对于那些选择,已被省略)。而且has_choice列表示产品有/没有选择。 完成此操作后,我将简单搜索结果元素。 我已经在这个问题上苦苦挣扎了两天。有人能帮我解决这个问题吗?我将不胜感激。感谢。
答案 0 :(得分:2)
此查询should do it。
SELECT t1.id_product,
Concat(Concat(t2.name_product, ' of '), t1.name_product) AS
`name_product`,
t1.has_choice,
t1.choice_id
FROM tbl1 AS t1
JOIN tbl1 AS t2
ON t1.choice_id = t2.id_product;
答案 1 :(得分:1)
如果我理解正确你可能意味着可口可乐的芬达反之亦然。
SELECT p.id_product,
CONCAT(p.name_product, ' of ', p1.name_product) name_product,
p.has_choice,
p.choice_id
FROM products p JOIN products p1
ON p.choice_id = p1.id_product
请注意,特定情况INNER JOIN
消除了has_choice
获取母产品选择产品的需要。
输出:
| ID_PRODUCT | NAME_PRODUCT | HAS_CHOICE | CHOICE_ID |
-------------------------------------------------------------
| 3 | Fanta of Coca-Cola | 0 | 2 |
| 4 | Sprite of Coca-Cola | 0 | 2 |
这是 SQLFiddle 演示。
UPDATE1 要获取所有产品的清单,他们是否是产品选择,您需要使用LEFT JOIN
。要在产品名称中搜索父产品和选择,请在WHERE
子句中使用适当的表别名。
SELECT p.id_product,
CASE WHEN p1.id_product IS NULL THEN
p.name_product
ELSE
CONCAT(p.name_product, ' of ', p1.name_product)
END name_product,
p.has_choice,
p.choice_id
FROM products p LEFT JOIN products p1 -- use LEFT JOIN here
ON p.choice_id = p1.id_product
WHERE p.has_choice = 0 -- filter out parent products
AND (p.name_product LIKE '%a%' -- search in product name
OR
p1.name_product LIKE '%a%') -- search in product name of a parent product
该查询中的 CASE
允许为不是选择的产品提供简单的产品名称。
输出:
| ID_PRODUCT | NAME_PRODUCT | HAS_CHOICE | CHOICE_ID |
-------------------------------------------------------------
| 3 | Fanta of Coca-Cola | 0 | 2 |
| 4 | Sprite of Coca-Cola | 0 | 2 |
| 5 | Axion | 0 | 0 |
这是 SQLFiddle 演示。
答案 2 :(得分:0)
你必须自己加入桌子。
试试这个:
SELECT id, CONCAT(table.name_product, ' of ', table2.name_product), table.has_choice, table.choice_id
FROM table
JOIN table ON (table.id_product = table.choice_id) AS table2