2015-11-21 89 views
0

我有一个数据库表,其中一列包含字符串值,看起来像在PHP字典。如何筛选SQL查询结果相匹配的字符串

表:大专

Id name requirement 
1 x {"users": ["A", "B"], "name": "*", "pool": "CSE", "place": "Bangalore"} 
2 y {"users": ["A", "C"], "name": "*", "pool": "CSE", "place": "Chennai"} 
3 z {"users": ["A", "B"], "name": "*", "pool": "ECE", "place": "Bangalore"} 
4 r {"users": ["A", "D"], "name": "*", "pool": "EEE", "place": "UP"} 

从这个表我只需要滤波器,其中要求列含有“池”的那些行:” CSE”。 这就是说,如果池是CSE或池是ECE等。

目前我用于读取整个表的PHP代码:

$query = "SELECT * FROM waitqueue"; 
    $result = mysql_query($query); 

    echo "["; 
    echo json_encode(mysql_fetch_assoc($result)); 
    while ($row = mysql_fetch_assoc($result)) 
     echo "," . json_encode($row); 
    echo "]"; 

我不想改变从单一query.So我上面的SQL query.Because我需要两个条件(全表和选择的池行)希望从结果中解析。

如何匹配“池”,我怎么能过滤那些行?

任何一个请建议我。

在此先感谢。

+0

什么是你的MySQL版本? – Mihai

+1

这是一个非常奇怪的体系结构...如果你想使用一个属性进行过滤,那么你不应该将它隐藏在一个序列化的列值深处,而是作为一个单独的列或引用,以便你可以创建一个索引。有一些允许访问json编码列的mysql扩展,但这并不能改变你的架构很奇怪的事实。你应该考虑改变它,因为当前的设置不会缩放。对于快速的解决方法,您可以简单地在'mysql_fetch_assoc()'函数周围创建一个包装函数来进行过滤。 – arkascha

+0

我的SQL版本:5.6.17 –

回答

1

在你的情况,你可以筛选这样

WHERE requirement LIKE '%"pool": "CSE"%' 

但是,这是非常大的拐杖:)

是喜欢单独列要求列:名称,游泳池,地点。 可能比你过滤这样的,例如:

WHERE pool = "CSE" 

其他方法来过滤你的,而周期行这样

$output = ''; 
while ($row = mysql_fetch_assoc($result)) { 
    $requirement = json_decode($row['requirement'], true); 
    if ($requirement['pool'] === 'CSE') { 
     $output .= $output ? ', ' : ''; 
     $output .= json_encode($row); 
    } 
} 
$output = '[' . $output . ']'; 
echo $output; 
+0

感谢您的回复。但我没有permisiion泄漏数据库。你可以建议我任何其他方式吗? –

+0

OK,答案更新 – mnv

+0

'mysql_fetch_assoc()'返回一行,因此你需要周期读所有行 – mnv