J'ai trois tables produits, propriétés et product_properties. Le sous-ensemble des structures de table et les valeurs sont indiquées ci-dessous:Requête MySQL avec plusieurs conditions et plusieurs tables
products
---------------------------------------------
| id | name | description | price |
---------------------------------------------
| 1 | Camera | Color Camera | 100 |
| 2 | Lens 1 | Camera Lens 1 | 20 |
| 3 | Lens 2 | Camera Lens 2 | 30 |
---------------------------------------------
properties
------------------------------------------
| id | name | display |
------------------------------------------
| 1 | lens_mount | Lens Mount |
| 2 | image_circle | Image Circle |
| 3 | focal_length | Focal Length |
| 4 | lens_family | Lens Family |
------------------------------------------
product_properties
------------------------------------------------
| id | value | product_id | property_id |
------------------------------------------------
| 1 | F-Mount | 2 | 1 |
| 2 | C-Mount | 3 | 1 |
| 3 | 42.01 mm | 2 | 2 |
| 4 | 13.00 mm | 3 | 2 |
| 5 | 10.00 | 2 | 3 |
| 6 | 12.00 | 3 | 3 |
| 7 | Standard | 1 | 4 |
| 8 | Standard | 2 | 4 |
| 9 | Standard | 3 | 4 |
------------------------------------------------
Voici ma condition de sortie:
Trouver tous les objectifs pour appareil photo 1 (caméra match et l'objectif par lens_family, qui est « Standard » ici) qui ont lens_mount = 'F-Mount' et image_circle> = 40 mm et focal_length> 5
J'ai essayé requête suivante pour cela:
SELECT * FROM products
INNER JOIN product_properties ON products.id = product_properties.product_id
INNER JOIN properties ON properties.id = product_properties.property_id
WHERE (product_properties.value = 'Standard')
AND (properties.name = 'lens_mount' AND product_properties.value = 'F-Mount')
AND (properties.name = 'image_circle' AND product_properties.value >= ABS('40 mm'))
AND (properties.name = 'focal_length' AND product_properties.value >= 5)
Toutefois, cette requête donne uniquement un résultat correct s'il n'y a qu'une seule condition. Avec toutes les conditions, cela ne donne aucune valeur. J'ai essayé avec OU à la place de ET dans la condition où, mais cela n'a pas aidé à obtenir la sortie correcte.
Quelqu'un peut-il trier ce s'il vous plaît. Merci d'avance.
J'aime cette solution. Vous devez probablement ajouter 'properties.name = 'lens_family' AND' à votre premier critère de clause 'HAVING' (' product_properties.value = 'Standard'') dans le cas où différentes propriétés pourraient avoir la valeur' Standard '. – Tom
@Tom. . . Très bon point. J'ai fait cette correction. –
Merci Gordon & Tom, cette solution a parfaitement fonctionné! – Lalu