Birden fazla özelliklere göre filtre

3 Cevap php

Ben tablo var:

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

Sorun nasıl ben bu tablodan seçebilir, burada name="audio" ve value="2.1" ve name="hdd" ve value="200 gb" ve {return [(4) }] ....

I bu nasıl yapabilirim?

3 Cevap

Ben ne istiyorum nitelik değerlerine dayalı tablosunu sorgulamak için olduğunu düşünüyorum, bu yüzden nitelik ürünleri aramak istiyorum audio eşittir 2.1 ve niteliği hdd eşittir 200 Gb. Sizin örnekte, bu ürünü iade etmelidir 13.

Farklı takma adları ile aynı tablo ile birden çok kez katılarak yapabilirsiniz.

Burada bir tablo products ürün ve bize denir gösterilen tablosunu içeren product_attributes varsayarak bir örnek

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'

Dinamik Eğer sorguda kullanmak istediğiniz niteliklerini değiştirmek istiyorsanız, bunu yürütmeden önce sorgu kendiniz üretmek zorunda kalacaktır.

Em ... böyle? Yoksa ne istiyorsun?

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

Benim tahminim ne istediğinizi kullanarak, tüm satırları seçmek için aslında olmasıdır

SELECT * FROM tablo

Ayrıca test amaçlı ifadesinde değişkenler sahip atıfta olabilir ancak

Örnek:

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

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

You can also assign a value to a user variable in statements other than SET. In thiscase, the assignment operator must be := and not = because = is treated as a comparison operator in non-SET statements:

mysql

aşağıdaki gibi sonra bunları kullanın:

SET @t1='audio';

mysql> SELECT @t1 FROM table;

bu şekilde her zaman arama için aynı sonucu alırsınız ve gerektiği gibi değişken kullanabilirsiniz. Ben de ses yazıldığından olmadığını fark autdio, ben bu bir yazım hatası olduğunu varsayabiliriz aynı. Burada büyük tahminim kod yayınlanan ilk bit gibi, görüntülüyebilmek için masaya her şeyi birini seçmek istiyorsanız, ya da sadece anahtar alanlarını seçmek istiyor.

If you are selecting SELECT * FROM tabloname WHERE id_products=13 AND name="audio" AND value="2.1" AND name="hdd" AND value="200 gb" the problem remains that you never get any row in the database that matches this criteria.