我正在尝试做类似PHP的事情array_intersect.我有下表
CREATE TABLE `recipes_ingredients_items` (
`id` INTEGER(11) DEFAULT NULL,
`itemid` INTEGER(11) DEFAULT NULL,
`orderby` TINYINT(4) NOT NULL,
KEY `id` (`id`),
KEY `itemid` (`itemid`)
)ENGINE=MyISAM
AVG_ROW_LENGTH=47 CHARACTER SET 'utf8' COLLATE 'utf8_general_ci';
Run Code Online (Sandbox Code Playgroud)
我需要一个查询,它会将包含id为2,72,64的所有结果作为一个不同的itemid.问题是id可能在itemid中不止一次存在,即itemid 600可能有3行,其中id为2,100,2.
我的想法是让一个查询说x number o子查询返回结果并执行类似PHP的操作array_intersect,从而返回具有所有这些id的itemid.
SELECT DISTINCT itemid FROM recipes_ingredients_items
WHERE
id IN (SELECT DISTINCT itemid FROM recipes_ingredients_items WHERE id = 71)
AND
id IN (SELECT DISTINCT itemid FROM recipes_ingredients_items WHERE id = 2)
AND
id IN (SELECT DISTINCT itemid FROM recipes_ingredients_items WHERE id = 22)
Run Code Online (Sandbox Code Playgroud)
这就是我得到的,它是100%错误的.
试试这个:
SELECT item_id
FROM recipes_ingredients_items
WHERE id IN (71, 2, 22)
GROUP BY item_id
HAVING COUNT(*) = 3
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2026 次 |
| 最近记录: |