3

我正在尝试使用一些“喜欢”来查询 mysql 表。但它根本不起作用。

这是我的代码:

 $color_base1 = $row[color_base1];
$color_base2 = $row[color_base2];

$result2 = mysql_query("SELECT * FROM item_descr WHERE (color_base1 LIKE 
           '%$color_base1%' OR color_base2 LIKE '%$color_base1%' OR color_base1 
           LIKE '%$color_base2%' OR color_base2 LIKE '%$color_base2%') 
           AND id_item != $itemId");

if (mysql_fetch_array($result2) == 0)
{
     $result2 = mysql_query("SELECT * FROM item_descr WHERE (keywords LIKE 
                '%$keywords%') AND id_item != $itemId LIMIT 3");
}
else 
{
    $row2 = mysql_fetch_array($result2);
    echo "<div class='similarTitle'>YOU MAY ALSO LIKE</div>";
    while ($row2 = mysql_fetch_array($result2))
    {
       echo "<div class='similarItems'>";
       echo "<img class='similarImage' src='images/{$row2[thumb1]}.jpg'>";
       echo "<div class='similarItemsText'>".$row2[name]."</div></div>";
    }
}

谢谢!

4

3 回答 3

1

尝试将您的查询更改为:

查询1:

SELECT  * 
FROM    item_descr 
WHERE   (color_base1 LIKE CONCAT('%' , $color_base1, '%') OR 
         color_base2 LIKE CONCAT('%' , $color_base1, '%') OR 
         color_base1 LIKE CONCAT('%' , $color_base2, '%') OR 
         color_base2 LIKE CONCAT('%' , $color_base2, '%')) AND 
         id_item != $itemId

查询 2:

SELECT  * 
FROM    item_descr 
WHERE   keywords LIKE CONCAT('%' , $keywords, '%') AND 
        id_item != $itemId 
LIMIT 3
于 2012-08-06T12:13:39.003 回答
0
$color_base1 = $row['color_base1']; // <- index NOT constant
$color_base2 = $row['color_base2'];

$result2 = mysql_query("SELECT * FROM item_descr WHERE (color_base1 LIKE '%$color_base1%' OR color_base2 LIKE '%$color_base1%' OR color_base1 LIKE '%$color_base2%' OR color_base2 LIKE '%$color_base2%') AND id_item != $itemId");

if(mysql_num_rows($result2) == 0) // <- check for NO RESULTS
{
    $result2 = mysql_query("SELECT * FROM item_descr WHERE (keywords LIKE '%$keywords%') AND id_item != $itemId LIMIT 3");
}

$row2 = mysql_fetch_array($result2);
echo "<div class='similarTitle'>YOU MAY ALSO LIKE</div>";
while ($row2 = mysql_fetch_array($result2))
{
  1. 您的数组引用不正确。$row['color_base1'] 与 $row[color_base1] 不同
  2. 您的代码从搜索结果(第一行)中获取一个数组,并根据 0 对其进行检查。我相信您的意思是检查返回的结果数量,如果没有,则检查建议。
  3. 如果您的第二个查询被执行,它不会对结果做任何事情
  4. 当您处理结果以产生输出时,您正在循环从第 2 行开始的结果(参见第 2 点)

调试:

  1. 如果你这样做 $sql="..."; 然后您可以通过 echo-ing $sql 进行调试,然后通过将结果放入 phpmyadmin 手动检查结果

  2. 做很多回声“我在排队:”.__ LINE __; 检查您的逻辑进入哪条路径。

  3. 将您的 phpmyadmin 结果与 var_dump($row); 进行比较 在你的循环内,看看你是否跳过了行。

  4. mysql_query($sql) 或死(mysql_error()); // 如果您的查询不正确,将停止

ETC.....

于 2012-08-06T12:13:14.523 回答
0

尝试在查询中转义变量

mysql_query("select ... like '%" . $var . "%' ...");
于 2012-08-06T12:13:16.590 回答