选择具有特定列值的多行中出现的 MySQL ID
识别满足特定列中两个或多个特定值的项目可以是MySQL 中的挑战。考虑以下表格结构:
+-----------------------+ | item_id | category_id | +-----------------------+ | 1 | 200 | | 1 | 201 | | 1 | 202 | | 2 | 201 | | 2 | 202 | | 3 | 202 | | 3 | 203 | | 4 | 201 | | 4 | 207 | +-----------------------+
目标是仅选择属于两个指定类别的项目,尽管可能与其他类别相关联。
无效的解决方案:
有效的解决方案:
自连接:
SELECT c1.item_id FROM item_category AS c1 INNER JOIN item_category AS c2 ON c1.item_id = c2.item_id WHERE c1.category_id = 201 AND c2.category_id = 202
此方法基于公共列 (item_id) 连接同一表中的行,允许在多行及其值之间进行比较。
GROUP BY:
SELECT c.item_id, COUNT(*) AS cat_count FROM item_category AS c WHERE c.category_id IN (201,202) GROUP BY c.item_id HAVING cat_count = 2
利用 GROUP BY 函数,此方法计算每个 item_id 的不同类别值的数量。选择 cat_count 等于指定类别数(本例中为 2)的项目。
结论:
两种方法都可以有效识别满足所需标准的项目。它们之间的选择取决于具体要求和数据库性能考虑。
以上是如何跨行选择具有多个特定列值的 MySQL ID?的详细内容。更多信息请关注PHP中文网其他相关文章!