【发布时间】:2015-04-17 13:37:33
【问题描述】:
我有一家商店,里面有物品和物品组。
我还得到了一些额外的物品,应该从中随机选择一个以将其显示在购物车概览中,如果该物品尚未出现在购物车中。
也可以有项目链接到项目组。如果没有项目链接到购物车中的项目,我想要其中一个,那么购物车内还没有被随机选择
我保存表 item2item 中项目之间的关系:
itemid INT
additional_item_id INT
我将组和项目之间的关系保存在表 group2item
中groupid INT
additional_item_id INT
为了更简单,我们假设我的 item 表如下所示:
itemid INT
name VARCHAR(100)
这是我试图获得的额外物品:
SELECT
name
FROM
items a
WHERE
(a.itemid) = (
# if we have any additional items linked to the item get one of em randomly, that is not inside of a cart
SELECT
CASE WHEN EXISTS (
SELECT
b.additional_item_id
FROM
item2item b
WHERE
b.additional_item_id NOT IN (10)
AND b.itemid IN (10)
)
THEN (
SELECT
c.additional_item_id
FROM
item2item c
WHERE
c.additional_item_id NOT IN (10)
AND b.itemid IN (10)
ORDER BY
RAND()
LIMIT 1
# else if we have additional items linked to the items group get one of em randomly, that is not inside of a cart
) ELSE (
(
SELECT
d.additional_item_id
FROM
group2item d
WHERE
d.additional_item_id NOT IN (10)
AND
d.groupid IN (1)
ORDER BY RAND()
LIMIT 1
)
)
END as selecteditemid
)
任何人都可以向我解释,为什么我会得到不同数量的行?
【问题讨论】:
标签: mysql subquery case exists