2010-08-17 7 views
0

J'ai une table MYSQL avec une grande liste de produits. Dans cette liste de produits, il y a des catégories, un nom, une description, un texte, etc. Je veux ajouter un modificateur pour les industries dans lesquelles il peut être utilisé (p.ex. hôpitaux, écoles, événements, événements sportifs, etc.)Comment sélectionner une cellule avec plusieurs valeurs dans une colonne?

Je l'exécution de cette requête par PHP/MYSQL en ce moment:

public function GetIndustrySeries($identifier, $SeriesIDArray = null) 
{    
    $query = "select ser.Identifier, 
         ser.ModelNumber, 
          ser.Title, 
          ser.Caption, 
          ser.Description, 
          ser.Picture, 
          ser.Industry, 
          cat.TitleText, 
          ser.AutoID, 
          ser.BasePrice 
          from ProductSeries ser 
          inner join 
          ProductIndustry cat 
          on 
          cat.Industry 
          = 
          ser.Industry 
          where 
          ser.Industry 
          like 
          ?"; 
    if($SeriesIDArray != null && count($SeriesIDArray) > 0) 
     $query .= " and "; 
    $i = count($SeriesIDArray); 
    $parameters = array(); 
    $parameters[0] = "s"; 
    $parameters[1] = $identifier; 
    if($SeriesIDArray != null){ 
     foreach($SeriesIDArray as $id) 
     { 
      $parameters[0] .= "i"; 
      array_push($parameters, $id); 
      $query .= " ser.AutoID = ?"; 
      if($i > 1) 
       $query .= " or "; 
      $i--; 
     } 
    } 

    $stmt = $this->_mysqli->prepare($query); 
    //$stmt->bind_param('ss', $identifier);     
     call_user_func_array(array($stmt,'bind_param'), $parameters); 
    $stmt->execute(); 
    $stmt->bind_result($ident2, $model, $title, $caption, $description, $picture, $ident, $catText, $sid, $price); 
     $stmt->store_result();   
    if($stmt->num_rows < 1) 
    { 
     $stmt->close(); 
     return null; 
    } 
    $array = array(); 
    while($stmt->fetch()) 
    { 
     array_push($array, array('seriesLink' => "/products/$ident2/$model", 'seriesTitle' => $title, 'seriesImage' => $picture, 'seriesCaption' => $caption, 'seriesDescription' => $description, "seriesCategoryName" => $catText, "seriesID" => $sid, "basePrice" => $price)); 
    } 
    $stmt->close();   
    return $array;   
}  

J'ai essayé d'utiliser le modificateur% dans le code des deux côtés de la? mais je reçois une erreur sur toute la ligne:

Attention: call_user_func_array() [function.call-utilisateur func-tableau]: Le premier argument devrait être un rappel valide, 'Array' a été donné en C: \ wamp \ www \ database.php en ligne 70.

dans le tableau que j'ai une colonne pour « Industrie » et ce que je veux faire est de mettre les industries que le produit se qualifie pour y espérant qu'il peut accepter plusieurs valeurs: "école, hôtel, hôpital"

+2

'en espérant qu'il peut accepter plusieurs valeurs: "école, hôtel, hôpital" '- avez-vous considéré la normalisation? voir http://en.wikipedia.org/wiki/Database_normalization – VolkerK

Répondre

0

me semble être beaucoup plus facile de faire une boucle à travers le réseau de industries voulaient et plutôt que de faire un « genre » faisant

$i=0 

$query...... 

....WHERE (ser.Industry = '".$industry(i)."'"; 

i++; 
while $industry(i) { 
    $query.=" OR ser.Industry = '".$industry(i)."'"; 
    i++; 
} 
$query.=")"; 

relisant votre question mais il semble que vous avez besoin d'une table intermédiaire avec une clé en deux parties, la colonne 1 serait l'industrie et la deuxième colonne du produit, vous aurait alors la clé pour le produit et la clé pour l'industrie et tout ce que vous devez faire est de sélectionner les lignes de votre table de catégorie où il y avait un enregistrement dans la nouvelle table avec le indu srty que vous cherchiez, ou toutes les lignes de la nouvelle table qui avait la catégorie de la première table pour voir toutes les industries de la catégorie, ou toutes les lignes de la nouvelle table pour une industrie pour voir toutes les catégories qui correspondent.

Il semble que vous pourriez faire avec plus de tables puisque la catégorie ressemble à une table, à une autre à l'industrie et à une autre encore. Rappelez-vous la première règle, les données doivent dépendre de la clé, de la clé entière et rien que de la clé.

Espérons que cela aide. SteveK

0

C'était une combinaison de mes tables n'ayant pas les mêmes valeurs dans l'industrie ainsi que la partie $ identificateur dans $ paramters [1]; Aussi, j'ai dû modifier certaines parties de la chaîne de requête.

Merci pour votre aide

Questions connexes