2010-07-26 5 views
0

Dans ma table de base de données que j'ai les champs suivants:MySQL - Recherche dans un champ de valeurs multiples

Tableau Fournisseur:

  • id
  • Nom
  • véhicules

A le fournisseur peut avoir plusieurs véhicules. Le champ 'véhicules' stockera plusieurs valeurs. Pour le moment, je délimite les valeurs sur un symbole 'pipe', bien que cela puisse être changé en une virgule si besoin est.

Sur ma page frontale, j'ai une liste de cases à cocher - un utilisateur peut sélectionner plusieurs véhicules. Le script back-end doit effectuer une recherche et ramener tous les fournisseurs qui contiennent l'un des identifiants de véhicules spécifiés. En d'autres termes, nous recherchons plusieurs valeurs dans un champ à plusieurs valeurs.

La case à cocher nom de la liste est VEHICLE_TYPE [] et finira dans le tableau $ _POST comme (par exemple):

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

Est-ce possible de le faire? Je pourrais évidemment le faire en utilisant une table de jointure mais idéalement je voudrais le faire de cette façon. J'utilise PHP comme langage de script si cela aide.

+0

Dupliquez votre question: [MySQL Join Query] (http://stackoverflow.com/questions/3337276/mysql-join-query), posté ** il y a 18 minutes **. –

+0

Pas un doublon - juste une approche différente. – GSTAR

Répondre

2

Le champ 'véhicules' stockera plusieurs valeurs. Pour le moment, je délimite les valeurs sur un symbole 'pipe', bien que cela puisse être changé en une virgule si besoin est.

Veuillez ne pas faire cela. Stocker des données délimitées dans un champ de texte est pas mieux que de le stocker dans un fichier plat. Les données deviennent indiscernables.

Vous souhaitez 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 

Le nom de la liste de case à cocher est VEHICLE_TYPE [] et se terminera dans le tableau $ _POST comme (par exemple) [...] Est-ce possible de faire?

C'est très possible et c'est une bonne idée. Essayez-le et découvrez comment cela fonctionne.

Questions connexes