2015-04-30 26 views
2

我从PHP与MySQL数据库检索数据如下什么是正确的MySQL的语法有多个参数检索数据

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

查询是正确的,没有错误和查询工作正常进行“标题LIKE'%$搜索%'”但参数“OR关键字LIKE'%$搜索%'”不检索数据。参数“AND”也正常工作。

关键字存储在数据库中,例如“披萨,餐馆,拿走”,但我没有看到这是一个问题。

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

+3

尝试围绕去掉括号'(标题LIKE“%$搜索%” OR LIKE“%$搜寻%”的关键字)'那些一般用于子查询。 –

+0

谢谢Fred -ii,你的回答比我的屏幕刷新率还快!我会立即尝试你的建议。不,没有解决 - 结果保持不变。 “OR”没有被读取。 –

+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将根据你相同的关键字,其中一列中包含“大披萨”,另一列中包含“比萨,带走餐馆”。

  • 请记住,无论您使用/分配$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%' 
+0

正确答案Fred但是“OR”参数仍然没有选择任何东西:( –

+0

@StrayDog您写的*“关键字存储在数据库中,例如”披萨,餐馆,带走“* - 数据如何存储在表格中,每行单个单词,或逗号分隔,并在一行中的许多单词?另外,举例说明'$搜索'中传递了什么 –

+0

@StrayDog请记住'WHERE标题LIKE'%$搜索% 'AND'AND approved ='YES''必须有匹配的数据,反过来也是一样的,就是'OR关键字LIKE'%$ Search%''AND AND approved ='YES''。Add'or die (mysql_error())'到'mysql_query()'看它是否返回任何错误。 –

0

对不起,我需要一些时间,但是这是我工作的答案我自己的问题...不是最漂亮的语法,但它没有任何字符串函数或爆炸函数。 MySQL能够处理的关键字相当良好,没有被列入任何其他功能:

$查询=请求mysql_query(“SELECT * FROM图片 WHERE 标题LIKE '%$搜索%' 和特色IS NOT NULL以及街景IS NOT NULL AND( AND(status ='1')AND(status ='1') OR 关键字LIKE'%$ Search%'AND featured IS NOT NULL AND streetview IS NOT NULL AND(id_user>'1')AND )ORDER BY title ASC“);

感谢大家的贡献

相关问题