我有一个包含大型产品列表的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-user-func-array]:第一个参数应该是一个有效的回调,第70行的C:\ wamp \ www \ database.php中给出了'Array'。
在表格中我有一个“行业”栏目,我想做的是把产品符合资格的行业放在那里,希望它能接受多种价值观:“学校,酒店,医院”
答案 0 :(得分:0)
您使用错误的方法获取数据。 call_user_func调用方法(参见http://au.php.net/call_user_func)。您希望使用mysql函数(http://au.php.net/manual/en/book.mysql.php),PDO(http://au.php.net/manual/en/book.pdo.php)或数据抽象层(如zend_db,doctrine等)来查询数据。
答案 1 :(得分:0)
在我看来,只需循环通过一系列想要的行业,而不是做一个“喜欢”的行为
$i=0
$query......
....WHERE ( ser.Industry = '".$industry(i)."'";
i++;
while $industry(i) {
$query.=" OR ser.Industry = '".$industry(i)."'";
i++;
}
$query.=")";
重新阅读您的问题,但似乎您需要一个带有两部分密钥的中间表,第1列是行业,第2列是产品,您将拥有产品的关键和行业的关键,您需要做的就是从类别表中选择行,其中新表中的记录包含您正在寻找的行业,或者新表中的所有行都具有第一个表中的类别以查看所有行业适合的类别,或新表中的所有行,以便行业查看所有匹配的类别。
似乎你可以使用更多的表,因为类别看起来像一个表,行业另一个,产品又是另一个。记住第一条规则,数据应该取决于密钥,整个密钥以及密钥。
希望这会有所帮助。 SteveK
答案 2 :(得分:0)
这是我的表格在行业中没有相同价值的组合以及$ paramters [1]中的$ identifier部分;还有一些我不得不修改查询字符串的某些部分。
感谢您的帮助