2010-07-26 195 views
0

在我的数据库表中,我有以下字段:MySQL的 - 搜索在多值字段

表供应商:

  • ID

一供应商可以有多辆车。 “车辆”字段将存储多个值。目前,我正在用“管道”符号分隔这些值,但如果需要,可以将其更改为逗号。

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

因此,换句话说,我们在一个多元值域多个值进行搜索。

复选框列表名称是汽车类型[]和将在$ _POST数组中最终成为(例如):

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

这是可能的吗?我显然可以使用连接表来做到这一点,但理想情况下我想这样做。如果有帮助,我使用PHP作为我的脚本语言。

+0

重复您的问题:[MySQL Join Query](http://stackoverflow.com/questions/3337276/mysql-join-query),发布** 18分钟**之前。 – 2010-07-26 17:46:42

+0

不是重复 - 只是一种不同的方法。 – GSTAR 2010-07-26 17:47:17

回答

2

字段“车”将存储多个值。目前,我正在用“管道”符号分隔这些值,但如果需要,可以将其更改为逗号。

请不要这样做。在文本字段中存储分隔的数据是不超过其存储在一个平面文件更好。数据变得无法查询。

你想a nice, happy, normalized database

CREATE TABLE Suppliers (
    supplier_id INTEGER PRIMARY KEY, 
    ... 
); 

CREATE TABLE Vehicles (
    vehicle_id INTEGER PRIMARY KEY, 
    ... 
); 

CREATE TABLE Supplier_Vehicles (
    supplier_id INTEGER NOT NULL REFERENCES Suppliers(supplier_id), 
    vehicle_id INTEGER NOT NULL REFERENCES Vehicles(vehicle_id), 
    UNIQUE KEY(supplier_id, vehicle_id) 
); 

-- Grab all the Vehicles for Supplier 39 
SELECT Vehicles.* 
    FROM Vehicles, Supplier_Vehicles 
WHERE Supplier_Vehicles.supplier_id = 39 
    AND Supplier_Vehicles.vehicle_id = Vehicles.vehicle_id 

复选框列表名称是汽车类型[]和将在$ _POST阵列(举例来说)[...]这是可以做到在结束了?

这是非常可能的,而且是一个好主意。尝试一下并找出它的工作效果。