【问题标题】:Can you check to see if there will be any results你能检查一下是否会有任何结果
【发布时间】:2012-05-15 12:24:14
【问题描述】:

我正在搜索页面上显示 Spotlight 帖子。

当用户输入关键字来搜索帖子时,我喜欢使用该关键字带来 Spotlight 帖子。如果没有包含该关键字的帖子,那么我只想从数据库中获取任何 Spotlight 帖子。

我的问题是,我可以在 MySQL 查询中检查这个,看看它们是否会是这个关键字的任何结果,如果不是,那么忽略这个关键字?

我的查询

SELECT id, title, desc 
  FROM post 
 WHERE isActive = 1 
   AND title = 'keyword'

但如果我使用此查询得到 0 个结果,我想忽略它并改为运行它

SELECT id, title, desc 
  FROM post 
 WHERE isActive = 1

【问题讨论】:

  • $keywords 直接传递到 SQL 中 - 我希望您使用正确的 MySQL API 将其转义?

标签: mysql mysql5


【解决方案1】:

desc 是 MySQL 的 reserved keyword(用于以 *desc*结束顺序对结果进行排序)。要将其用作列名,您需要将其放在反引号中

$select = " SELECT id, title, `desc` ";
$from = ' FROM post';
$where = 'WHERE isActive=1 and title="%$keywords%"';
$sql = $select.$from.$where;

【讨论】:

  • 这只是一个例子。我没有调用列 desc
  • 啊...请确保您的示例代码在语法上是正确的,否则试图回答您的人会感到困惑...就像我一样:)
  • 另外我相信你想要$where = "WHERE isActive=1 and title LIKE '%$keywords%'"; 而不是$where = 'WHERE isActive=1 and title="%$keywords%"'; 但这是一个示例还是实际代码?
  • 我所做的是检查结果,如果没有找到,然后尝试另一个没有任何关键字的查询。非常感谢您的帮助。
【解决方案2】:

这就是我为解决我的问题所做的。

$select = " SELECT id, title, desc ";
$from = ' FROM post';
$where = 'WHERE isActive=1 and title="%$keywords%"';
$sql = $select.$from.$where;

如果没有结果则覆盖

$where = 'WHERE isActive=1';
$sql = $select.$from.$where;

如果有人知道其他方式,请告诉我。

【讨论】:

    猜你喜欢
    • 2010-10-26
    • 1970-01-01
    • 1970-01-01
    • 2014-01-18
    • 2017-07-24
    • 2011-02-05
    • 1970-01-01
    • 1970-01-01
    • 2022-08-03
    相关资源
    最近更新 更多