2010-07-26 118 views
0

我需要建立一个连接用于以下查询:MySQL的加入查询

表供应商:

  • ID

表supplier_vehicles

  • ID
  • supplier_id
  • vehicle_id

一个供应商可以有多个车辆。

在我的前端表单中,我有一个复选框列表 - 用户可以选择多个车辆。后端脚本需要进行搜索并返回包含任何指定车辆ID的所有供应商。

复选框列表名称是汽车类型[]和将在$ _POST数组(例如)在结束了:

Array 
(
    [0] => 1 
    [1] => 4 
    [2] => 6 
) 

此刻,我可以用一些SQL实例,这样我可以测试做查询使用不同的值。

回答

2

如果你知道车辆的ID,你可以使用IN子句:

SELECT * 
    FROM supplier s 
    , supplier_vehicles v 
WHERE s.id = v.supplier_id 
    AND v.vehicle_id IN (1, 4, 6) 

如果你只是想在不同供应商的ID,你可以使用DISTINCT。

SELECT DISTINCT s.supplier_id 
    FROM supplier s 
    , supplier_vehicles v 
WHERE s.id = v.supplier_id 
    AND v.vehicle_id IN (1, 4, 6) 
+0

需要使用动态SQL动态IN参数... – 2010-07-26 17:28:49

+1

@OMG小马 - 我是试图给他一些查询例子。我不确定他在前端使用什么语言,所以我尽量保持一般。但是,由于SQL注入风险,我不会在前端执行硬编码查询,如果需要,我会创建SP并传递值并在后端使用动态SQL。 – dcp 2010-07-26 17:31:28

+1

向合唱团讲道:)我不知道动态输入参数是否是OP所需要的。 – 2010-07-26 17:34:34

0

首先创建一个字符串,它包含逗号分隔的所有元素。不知道你在做什么语言,但你可以使用JOIN函数或循环访问数组。

根据您的示例字符串将等于1,4,6

的为您的SQL查询:

"SELECT s.name 
FROM supplier AS s 
JOIN supplier_vehicles AS v 
ON s.id = v.supplier_id 
WHERE v.vehicle_id IN (" + stringName + ")"