我的数据库是......
**Mytable**
UserID Orders Remarks
1 13,17,01,20,19 Done
2 12,18,17,15 Waiting
3 14 Done
4 15,10 Done
我想显示订单的UserID ...示例
但是,使用我的sql语句,它会显示以下内容
我的sql语句是
select UserID from MyTable where Orders like %$orders%
我错过了什么?
答案 0 :(得分:1)
'LIKE'将在该字段中搜索给定子字符串的字符串。所以:
select UserID from MyTable where Orders like %$orders%
带
'Orders' = '13,17,01,20,19'
和
'$orders' = '13, 01'
将不匹配,如果这些数字的顺序相同,它将匹配:
'Orders' = '13,01,17,20,19'
要使您的查询有效,请按以下方式进行:
select UserID from MyTable where Orders like %$order1% AND Orders like %$order2% AND Orders like %$order3%
为每个想要匹配的orderid使用一个$ orderx。
更好的解决方法是规范化您的数据库。阅读有关多对多关系的信息,并将您的订单放入新表中。这样,您可以根据需要为每个用户标识提供尽可能多的订单,并仍然使用相同的单个查询选择它们。
答案 1 :(得分:0)
根据您的要求,您必须使用逗号分解$ order字符串并将其转换为数组。并像这样运行一个foreach
$order_array = explode(",", $order);
$like_array = array('0'); // Stop errors when $words is empty
foreach($order_array as $ord){
$like_array[] = 'Orders LIKE %'.$ord.'%'
}
$sql = 'SELECT UserId FROM MyTable WHERE '.implode(" OR ", $like_array);
执行$ sql。
希望这有帮助。
正如人们在评论中建议的那样,如果你有一个规范化的数据库,这是非常好的。你只是一直保存。你可以在这里找到一个很好的教程。
http://net.tutsplus.com/tutorials/tools-and-tips/relational-databases-for-dummies/
这将是一个很好的开始。
答案 2 :(得分:0)
如果您需要使用LIKE查找订单15的数据,您的表结构可能会出现问题,它将获取115,150,215 1511等数据。所以我建议你改变你桌子的结构。