复杂的MySQL查询,从多表中过滤

时间:2011-10-27 13:14:06

标签: mysql

我有一个ORDER_TABLE来存储所有ORDER(order_id,order_name)

ORDER_ITEMS_TABLE存储每个订单的所有项目(order_item_id,order_id,item_name)。每行都是一个项目,订单在ORDER_ITEMS_TABLE

中有很多行

我有一个输入,允许用户输入项目列表,用逗号分隔(item1,item2,item3) 当用户提交时,我应该从ORDER_TABLE获得包含上述所有项目的所有订单(item1 AND item2 AND item3)

请帮帮我

2 个答案:

答案 0 :(得分:3)

确保在将用户添加到查询中之前解析用户的逗号分隔项列表,否则您将对SQL注入攻击开放。

SELECT ot.order_name, oit.item_name
FROM ORDER_ITEMS_TABLE oit
INNER JOIN ORDER_TABLE ot ON ot.order_id = oit.order_id
WHERE oit.order_item_id IN (your,list,of,items)

答案 1 :(得分:1)

扩展@Crontabs答案:

$items = $_POST['items'];
$item_array = explode(',',$items);
foreach ($item_array as $item) 
{
  $item = mysql_real_escape_string($item);
}
$items = implode("','", $item_array);
$query = "SELECT ot.order_name, oit.item_name     
          FROM ORDER_ITEMS_TABLE oit     
          INNER JOIN ORDER_TABLE ot ON ot.order_id = oit.order_id     
          WHERE oit.order_item_id IN ('$items')  "; 

现在您已正确转义这些CSV项目。