使用多个参数检索数据的正确MySQL语法是什么

时间:2015-04-30 01:50:01

标签: php mysql

我正在使用php和MySQL从数据库中检索数据,如下所示

 $query = mysql_query("SELECT * FROM pictures WHERE (title LIKE      '%$Search%' OR keywords LIKE '%$Search%') AND approved = 'YES' ORDER BY title ASC");

查询正确且没有错误,查询适用于“title LIKE'%$ Search%'”,但参数“OR keywords LIKE'%$ Search%'”未检索到数据。参数“AND”也可以正常工作。

关键字存储在数据库中,例如“披萨,餐馆,带走”,但我不认为这是一个问题。

我的问题是“应用”OR“参数的正确语法是什么?

2 个答案:

答案 0 :(得分:2)

删除(title LIKE '%$Search%' OR keywords LIKE '%$Search%')

周围的括号

这些通常用于子查询。

$query = mysql_query("
                     SELECT * FROM pictures 
                     WHERE title LIKE '%$Search%' 
                     OR keywords LIKE '%$Search%' 
                     AND approved = 'YES' 
                     ORDER BY title ASC
                     ");

以下是子查询的示例,并摘自MySQL.com上的手册:

SELECT * FROM t1 WHERE column1 = (SELECT column1 FROM t2);

修改

或尝试不同的引用方法:

$query = mysql_query("
                     SELECT * FROM pictures 
                     WHERE title LIKE '".%$Search%."' 
                     OR keywords LIKE '".%$Search%."' 
                     AND approved = 'YES' 
                     ORDER BY title ASC
                     ");

您也可以尝试转义数据:

$Search = mysql_real_escape_string($Search);

作为一个例子。我不知道你是如何分配这个变量的。

phpMyAdmin测试编辑:

这是我在phpMyAdmin中使用的内容:

SELECT * FROM table 
WHERE col1 LIKE '%pizza%' 
OR col2 LIKE '%pizza%' 
AND col3 = 'YES' 
ORDER BY col1 ASC

使用pizza作为搜索关键字,看到$Search将基于相同的关键字,其中列包含"大披萨"在一个,和#34;披萨,带走,餐馆"在另一个。

  • 请记住,无论您使用/分配$Search,都必须驻留在所有查询的列中。

您可能还想使用explode()

以下是从https://stackoverflow.com/a/15289777/

中提取的示例
<?php
  $search = 'Gold Chain Shirt';
  $bits = explode(' ', $search);

  $sql = "SELECT name FROM product WHERE name LIKE '%" . implode("%' OR name LIKE '%", $bits) . "%'";

以上将生成此查询:

SELECT name FROM product WHERE name LIKE '%Gold%' OR name LIKE '%Chain%' OR name LIKE '%Shirt%'

答案 1 :(得分:0)

很抱歉花了一些时间,但这是我对自己的问题的工作答案...不是最漂亮的语法,但它没有任何字符串函数或爆炸函数。 MySql可以很好地处理关键字而不包含任何其他功能:

$ query = mysql_query(“SELECT * FROM pictures 哪里 title LIKE'%$ Search%'和特色IS NOT NULL并且streetview IS NOT NULL AND(id_user&gt;'1')AND(status ='1') 要么 关键词LIKE'%$ Search%'AND features IS NOT NULL AND streetview IS NOT NULL AND(id_user&gt;'1')AND(status ='1')ORDER BY title ASC“);

谢谢大家的贡献