按多个属性过滤

时间:2010-04-22 13:58:47

标签: php sql

我有桌子:

id id_products id_atribut   name     value
1     13          8        autdio      2.1
2     13          9        hdd         200 Gb
3     13          10       cd-rom       2
4     20          8         audio       2.1

问题是,如何从此表中选择name="audio"value="2.1"以及name="hdd"value="200 gb"并返回id_products=13 .... < / p>

我该怎么做?

3 个答案:

答案 0 :(得分:2)

我认为您想要的是根据属性值查询您的表格,因此您希望搜索属性audio等于2.1且属性hdd等于{{}的产品1}}。在您的示例中,它应返回产品200 Gb

您可以通过使用不同的别名多次连接同一个表来完成此操作。

以下示例假设您有一个包含您的产品的表13,并且您向我们展示的表名为products

product_attributes

如果要动态更改要在查询中使用的属性,则必须在执行查询之前自己生成查询。

答案 1 :(得分:0)

Em ......喜欢这个?或者你想要什么?

SELECT * FROM table
WHERE
id_products=13 and name="audio" and value="2.1" and name="hdd" and value="200 gb"

答案 2 :(得分:0)

我的猜测是,您想要的实际上是使用

选择所有行
  

SELECT * FROM table

但是,您也可以在语句中引用变量用于测试目的

示例:

SET @var_name = expr [, @var_name = expr] ...

For SET, either = or := can be used as the assignment operator.
  

您还可以在除以外的语句中为用户变量赋值   组。在这种情况下,分配   运算符必须是:=而不是=因为   =被视为非SET语句中的比较运算符:

mysql

然后你按如下方式使用它们:

SET @t1='audio';

mysql> SELECT @t1 FROM table;

通过这种方式,您将始终获得相同的搜索结果,并且可以根据需要使用该变量。我还注意到你的音频拼写不是autdio,我能否认为这是一个错字。这里最大的猜测是你要从表中选择所有内容来查看它,比如发布的第一个代码,或者你只想选择关键字段。

如果您选择SELECT * FROM tablename WHERE id_products=13 AND name="audio" AND value="2.1" AND name="hdd" AND value="200 gb",问题仍然是您从未在数据库中获得符合此条件的任何行。