web-dev-qa-db-fra.com

Sélectionnez dans une liste de valeurs à partir de données codées JSON

J'ai enregistré les détails du produit au format JSON.
[

Par exemple I want to select TV with screen_type as LED or LCD.

Et la valeur est enregistrée comme

{"screen_size":"22 - 24", "screen_type":"LED", "smart_tv":"no", "3d":"no", "resolution":"HD Ready", "hdmi":"1", "usb":"1"}

Il est possible de faire avec UNION question comme:

SELECT * FROM `nw_object_detail` WHERE `details` LIKE '%"screen_type":"LED"%'  
UNION  
SELECT * FROM `nw_object_detail` WHERE `details` LIKE '%"screen_type":"LCD"%'

Mais la requête sera trop longue s'il ya beaucoup de choix. Y a-t-il une solution de manière plus simple.

3
Eugine Joseph

J'ai eu une solution:

  1. Vérification unique de la valeur dans le tableau JSON

    SELECT * FROM `nw_object_detail` 
    WHERE ((`details` like '%"screen_type":"%LED%"%'))
    
  2. Une valeur de plusieurs possibilités

    SELECT * FROM `nw_object_detail`
    WHERE ((`details` like '%"screen_type":[%"%LCD%"%]%') 
    

Solution php

if(count($options)>1): 
    $condition = '(';
    $count = 1;
    foreach( $options as $option ): 
        $condition .= '(`details` like \'%"'.$key.'":[%"%'.$option.'%"%]%\')';
        if(count($options)!=$count): 
            $condition .= ' OR ';
        endif;
    endforeach;
$condition .= ')';    
3
Eugine Joseph