2010-08-17 71 views
0

我有一個大型產品列表的MYSQL表。在這個產品列表中有類別,名稱,描述,文本等。我​​想爲可用於其的行業(例如醫院,學校,活動,體育賽事等)添加修飾符如何在一列中選擇具有多個值的單元格?

我現在通過運行PHP/MySQL的這個查詢:

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;   
}  

我使用%改性劑在兩側的代碼試過嗎?但我發現了一個錯誤的路線:

警告:call_user_func_array()[function.call-用戶FUNC陣列]:第一個參數是有望成爲一種有效的回調,「陣列」是在給定的C:\ wamp \ www \ database.php在線70.

在表中我有一個「行業」專欄,我想要做的是將產品符合要求的行業放在那裏可以接受多個值:「學校,酒店,醫院」

+2

'希望它可以接受多種價值:「學校,酒店,醫院」 - 你認爲正常化嗎?請參閱http://en.wikipedia.org/wiki/Database_normalization – VolkerK 2010-08-17 23:41:44

回答

0

在我看來,只要循環訪問數組產業要和而不是做一個「喜歡」做

$i=0 

$query...... 

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

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

重讀你的問題不過看來你需要用兩個部分關鍵的一箇中間表,列1將成爲行業和二列的產品,你然後將產品的關鍵和行業的關鍵,你需要做的就是從你的類別表中選擇新表中有記錄的行或者新表中的所有行都具有第一個表中的類別,以查看該類別所適合的所有行業,或者來自新表的所有行,以便行業查看所有匹配的類別。

看起來你可以使用更多的表格,因爲類別看起來像一張表,另一個產業又是另一個產品。記住第一條規則,數據應該取決於密鑰,整個密鑰以及密鑰。

希望這會有所幫助。 SteveK

0

這是我的工作表中不具有相同值的表格以及$ paramters [1]中的$ identifier部分的組合;還有一些我不得不修改查詢字符串的一些部分。

感謝您的幫助

相關問題