Php 按多属性筛选

Php 按多属性筛选,php,sql,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=“aud

我有一张桌子:

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\u products=13


我该怎么做?

嗯。。。这样地?或者你想要什么

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

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

从表中选择*

然而,您也可以在语句中使用变量进行测试

例如:

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

For SET, either = or := can be used as the assignment operator.
您还可以在语句中为用户变量赋值,而不是 设置在本例中,任务 运算符必须为:=而不是=因为 =在非SET语句中被视为比较运算符:

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

SET @t1='audio';

mysql> SELECT @t1 FROM table;
这样,搜索结果总是相同的,您可以根据需要使用变量。我还注意到您的音频拼写不一样,我可以假定这是一个拼写错误吗。这里最大的猜测是,您想要从表中选择要查看的所有内容,比如发布的第一段代码,或者只想要选择关键字段


如果您选择的是
SELECT*FROM tablename,其中id\u products=13和name=“audio”和value=“2.1”以及name=“hdd”和value=“200 gb”
,那么问题仍然是,您在数据库中从未获得任何符合此条件的行

我认为您需要的是根据属性值查询表,因此您需要搜索具有属性
audio
equals
2.1
和属性
hdd
equals
200gb
的产品。在您的示例中,它应该返回产品
13

可以通过多次使用不同别名连接同一个表来实现这一点

下面是一个示例,假设您有一个包含您的产品的表
products
,您向我们展示的表称为
product\u attributes

select id
from products
inner join product_attributes attribute_audio 
    on products.id = attribute_audio.product_id 
    and attribute_audio.id_atribut = 8
inner join product_attributes attribute_hdd 
    on products.id = attribute_audio.product_id 
    and attribute_hdd.id_atribut = 9
where attribute_audio.value = '2.1'
and attribute_hdd.value = '200 Gb'

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

我不理解您的问题。你能描述一下你想要的结果吗?除了几个不必要的词外,你的问题还包含正确的零结果SQL查询,这对进一步阅读是没有坏处的。你可以从tablename中选择*,其中id\u products=13和name=“audio”和value=“2.1”以及name=“hdd”和value=“200 gb”但这不会返回任何内容,因为没有包含所有这些值的行。您是在寻找还是在寻找AND?这个查询是没有意义的,因为很明显,在同一个字段中没有一行有两个不同的值!我想这是解决我问题的办法。我想做一个像Magento atributs的过滤器。