【问题标题】:MYSQL - How to compare multiple columns for matching categoriesMYSQL - 如何比较匹配类别的多个列
【发布时间】:2012-06-10 20:51:58
【问题描述】:

我有一个名为 PRODUCTS 的表,其中包含三个不同类别的 3 列,我想选择在 3 列中的任何一个中具有 3 个值中的任何一个的所有产品。 我正在尝试做的是根据 3 个类别中的任何一个显示相关产品。

示例表:

id,name,cat1,cat2,cat3

1,键盘,2,8,4
2,鼠标,2,NULL,NULL
3,监视器,16,2,NULL

假设我正在查看 ITEM id=1,我想做一个查询以显示在 3 列中的任何一个中具有类别编号 2 的其他 2 个产品。

我该怎么做?

非常感谢, 安德烈斯

【问题讨论】:

  • 我认为这不是一个最佳设计。

标签: php mysql multiple-columns


【解决方案1】:

那么,对于任何给定的 ID,在他们的类别中找到与所选 ID 具有相同类别的其他“兄弟姐妹”?

选择 id 作为 selected_id,p1.cat 作为 p1_cat,p2.cat 作为 p2_cat,p3.cat 作为 p3_cat
从产品 p1、产品 p2、产品 p3
在哪里
p1.cat = p2.cat

p1.cat = p3.cat
// 以及其他各种条件,例如,它不是重复
p1.id != p2.id
p1.id != p3.id
p2.id != p3.id
等等
// 你也可以用join products p3 on p3.cat = p1.cat 代替 // 我这样做的详细方式

顺便说一句,这在性能方面是个坏主意。最好以编程方式完成,而不是在 SQL 中。任何时候你在处理像这样的游标查询,只需在代码中使用数组,而不是在 SQL 中

【讨论】:

  • 非常感谢,我会尝试看看会发生什么...我想我最好找到使用 PHP 的方法
【解决方案2】:
SELECT * FROM table_name WHERE id != 1 AND (cat1 = 2 OR cat2 = 2 OR cat3 = 2)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多