首页 > 解决方案 > Mysql WHERE 子句中的多个参数导致问题

问题描述

我在 php 中有一个从数据库中提取新闻文章的查询,当每个 WHERE 子句独立应用时,它工作正常。

示例 #1

//retrieve all news articles
$sql = 'SELECT post.id, post.headline_en, post.story_en, post.post_stat, post.trans_stat, post.translate, post.published_by,
post.publish_on, system_users.u_username, system_users.u_firstname, system_users.u_lastname
FROM post INNER JOIN system_users ON post.published_by=system_users.u_userid';

// If search terms have been provided...
if($_POST['query'] != '')
{
  $sql .= ' WHERE (headline_en LIKE "%'.str_replace(' ', '%', $_POST['query']).'%" OR post.story_en LIKE "%'.str_replace(' ', '%', $_POST['query']).'%")';
}

$sql .= ' ORDER BY post.publish_on DESC';

这似乎工作正常,并根据 $_POST['query'] 中提供的搜索值限制结果。

示例 #1

//retrieve all news articles
$sql = 'SELECT post.id, post.headline_en, post.story_en, post.post_stat, post.trans_stat, post.translate, post.published_by,
post.publish_on, system_users.u_username, system_users.u_firstname, system_users.u_lastname
FROM post INNER JOIN system_users ON post.published_by=system_users.u_userid
WHERE (post.post_stat=3 AND post.trans_stat=3) OR (post.post_stat=3 AND post.translate=0)';

// search option removed

$sql .= ' ORDER BY post.publish_on DESC';

这也可以正常工作,并将结果限制为 WHERE 子句中指定的条件。

但是,当我尝试将两者结合起来时,它不想玩得很好,我不确定为什么。

示例#3

//retrieve all news articles
$sql = 'SELECT post.id, post.headline_en, post.story_en, post.post_stat, post.trans_stat, post.translate, post.published_by,
post.publish_on, system_users.u_username, system_users.u_firstname, system_users.u_lastname
FROM post INNER JOIN system_users ON post.published_by=system_users.u_userid
WHERE (post.post_stat=3 AND post.trans_stat=3) OR (post.post_stat=3 AND post.translate=0)';

//If search terms have been provided...
if($_POST['query'] != '')
{
  $sql .= ' AND (headline_en LIKE "%'.str_replace(' ', '%', $_POST['query']).'%" OR post.story_en LIKE "%'.str_replace(' ', '%', $_POST['query']).'%")';
}

$sql .= ' ORDER BY post.publish_on DESC';

^^ 不起作用。我已经尝试了上述的各种排列,对于我的生活,我看不出有什么问题。一如既往的任何反馈将不胜感激。

标签: phpmysql

解决方案


看来我应该看得更近一点:/

我花了很多时间将 WHERE 子句的部分括起来,以至于我将其范围缩小到无法返回任何值,因为无法满足所有条件......

下面的工作代码:

//retrieve all news articles
$sql = 'SELECT post.id, post.headline_en, post.story_en, post.post_stat, post.trans_stat, post.translate, post.published_by,
post.publish_on, system_users.u_username, system_users.u_firstname, system_users.u_lastname
FROM post INNER JOIN system_users ON post.published_by=system_users.u_userid
WHERE (post.post_stat=3 AND post.trans_stat=3 OR post.post_stat=3 AND post.translate=0)';

//If search terms have been provided...
if($_POST['query'] != '')
{
  $sql .= ' AND (headline_en LIKE "%'.str_replace(' ', '%', $_POST['query']).'%" OR post.story_en LIKE "%'.str_replace(' ', '%', $_POST['query']).'%")';
}

$sql .= ' ORDER BY post.publish_on DESC';

推荐阅读