我正在使用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“参数的正确语法是什么?
答案 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“);
谢谢大家的贡献