2010-07-26 6 views
0

В моей таблице базы данных у меня есть следующие поля:MySQL - Поиск в поле множественного значения

Таблица Поставщик:

  • идентификатор
  • имя
  • автомобили

поставщик может иметь несколько транспортных средств. Поле «транспортные средства» будет хранить несколько значений. В настоящий момент я ограничиваю значения символом 'pipe', хотя это может быть изменено на запятую, если это необходимо.

На моей внешней форме у меня есть список флажков - пользователь может выбрать несколько транспортных средств. Сценарий back end должен выполнять поиск и возвращать всех поставщиков, которые содержат любой из указанных идентификаторов транспортного средства.

Иными словами, мы находим несколько значений в поле с несколькими значениями.

Флажок имя список vehicle_type [] и будет в конечном итоге в массиве $ _POST, как (например):

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

Возможно ли это сделать? Я мог бы сделать это, используя таблицу соединений, но в идеале я хотел бы сделать это таким образом. Я использую PHP в качестве языка сценариев, если это помогает.

+0

Дубликат вашего вопроса: [MySQL Join Query] (http://stackoverflow.com/questions/3337276/mysql-join-query), отправленный ** 18 минут ** назад. –

+0

Не дубликат - просто другой подход. – GSTAR

ответ

2

Полевые «транспортные средства» будут хранить несколько значений. В настоящий момент я ограничиваю значения символом 'pipe', хотя это может быть изменено на запятую, если это необходимо.

Пожалуйста, не делайте этого. Сохранение данных с разделителями в текстовом поле не лучше, чем их хранение в плоском файле. Данные становятся неудовлетворительными.

Вы хотите 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 

Флажок имя список vehicle_type [] и будет в конечном итоге в массиве $ _POST, как (например) [...] Возможно ли это сделать?

Это очень возможно, и это хорошая идея. Попробуйте и выясните, насколько хорошо он работает.

Смежные вопросы