Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/263.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/70.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 使用WHERE、AND和&;或者在相同的MySQL查询帮助中_Php_Mysql - Fatal编程技术网

Php 使用WHERE、AND和&;或者在相同的MySQL查询帮助中

Php 使用WHERE、AND和&;或者在相同的MySQL查询帮助中,php,mysql,Php,Mysql,这个查询有效吗?这是最有效的吗 SELECT * FROM `posts` WHERE MATCH (`title`, `body`) AGAINST ('search terms' IN BOOLEAN MODE) AND `price` BETWEEN '100' AND '1000' AND (`postinto` = 'cat1' OR `postinto` = 'cat2') AND (`location` = 'loc1' OR `location` = 'loc2') ORDER

这个查询有效吗?这是最有效的吗

SELECT * FROM `posts`
WHERE MATCH (`title`, `body`)
AGAINST ('search terms' IN BOOLEAN MODE)
AND `price` BETWEEN '100' AND '1000'
AND (`postinto` = 'cat1' OR `postinto` = 'cat2')
AND (`location` = 'loc1' OR `location` = 'loc2')
ORDER BY `id` DESC
LIMIT 0, 100;
注意:
postino
location
的值将包含在一个PHP数组中,因此如果这能起作用,我计划将它们的值循环到数组中以生成查询词。有没有办法将整个数组传递给MySQL?此外,这两个条件可能相当长(十几个值)。有更好的办法吗

具体而言,我的问题是:

AND (`postinto` = 'cat1' OR `postinto` = 'cat2')
AND (`location` = 'loc1' OR `location` = 'loc2')
可能值的一个示例是“社区|团体”、“买卖交易|电子产品”,其中
之前是一个类别,而
之后是一个子类别。如果我正在搜索整个类别,我希望将查询的该部分更改为:

AND (`postinto` LIKE 'category|%' OR `postinto` = 'this'
我有适合全文搜索的索引,我的问题是关于OR子句。在一个查询中,您可以使用或使用的最大次数是多少?这个语法正确吗


谢谢

确实有。在这方面,IN声明可以帮助您

您的查询将变成如下所示:

SELECT * FROM `posts`
WHERE MATCH (`title`, `body`)
AGAINST ('search terms' IN BOOLEAN MODE)
AND `price` BETWEEN '100' AND '1000'
AND `postinto` IN ('cat1', 'cat2')
AND `location` IN ('loc1', 'loc2')
ORDER BY `id` DESC
LIMIT 0, 100;

你可以在某个地方随意使用AND和OR,但为了保持理智,你需要遵守一些简单的规则

1) 不要混用它们,用WHERE和OR构建一个查询,但是结果将是不可预测的,并且结果集可能包含同一记录的多个实例!(您正在有效地将OR构造转换为OR

2) 我建议将所有OR语句放在任何AND语句之前。这会让你更容易理解,也让其他人更容易维护

3) 这可能不是必要的,但如果可能的话,我总是将这些文件或声明放在括号内

我维护一个体育数据库,并运行一些查询,这些查询在“选择”菜单中可以有多个选项

希望下面的例子能简化解释

//进行查询以检索单打游戏集

 $query = "SELECT * from Games WHERE Season = '$season' 
 AND GameNo < 8 
 OR Player1 = '$playerName' ORDER by MatchNo ASC";
 $result = @mysql_query($query); // Run the query.
 $num = mysql_num_rows($result);
这将生成一个结果集,其中包含一名球员参加过的所有联赛双打。要么是主队球员1或2,要么是客场球员3或4

使用多个单独的OR语句生成查询。然后在OR之间放置AND 声明

$query = "SELECT * from CupGames WHERE (Player1 = '$playerName' 
OR Player2 = '$playerName' OR Player3 = '$playerName' 
OR Player4 = '$playerName' OR Player5 = '$playerName'
OR Player6 = '$playerName') AND (CupID = 'CS' OR CupID = 'ND') 
AND Season = '$season' AND GameNo < 4 ORDER by CupRound ASC";
$result04 = @mysql_query($query); // Run the query.
$num = mysql_num_rows($result04);
$query=“从CupGames中选择*,其中(Player1='$playerName'
或Player2='$playerName'或Player3='$playerName'
或Player4='$playerName'或Player5='$playerName'
或Player6='$playerName')和(丘比特='CS'或丘比特='ND')
季节=“$Season”和GameNo<4,按CupRound ASC排序”;
$result04=@mysql_query($query);//运行查询。
$num=mysql\u num\u行($result04);
这将生成一个结果集,其中包含一名球员参加过的所有杯赛三连胜。无论是主队球员1、2或3,还是客场球员4、5或6。在任何一个 两个选定的杯子。所选赛季的CS(加冕盾)或ND(诺曼日杯)

如果你想留头发,我建议你遵守这些规则。 (我已经退休了,满头头发!)
祝你好运

我们对您的模式一无所知(特别是您设置了哪些索引等),因此无法进行评估。我建议用你使用的CREATETABLE语句更新你的问题。关于你更新后的问题:In不能处理LIKE语句,你必须单独处理这些语句。但是您仍然可以这样做:WHERE(位置,如'category |%'或IN('bla','bla'))实际上,查询中只能有一个WHERE语句,对吗?是的,这是正确的。然而,就像在初始查询中一样,据我所知,您可以使用任意多的OR和and。只要你将它们适当地隔离(当然是用(和)。我知道了,谢谢……我不需要像……这样的位置)一个简单而有效的方法
 $query = "SELECT * from Games WHERE Season = '$season' 
 AND GameNo < 8 AND (Player1 = '$playerName' 
 OR Player3 = '$playerName') ORDER by MatchNo ASC";
 $result = @mysql_query($query); // Run the query.
 $num = mysql_num_rows($result);
 $query = "SELECT * from Games WHERE (Player1 = '$playerName' 
 OR Player2 = '$playerName' OR Player3 = '$playerName' 
 OR Player4 = '$playerName') AND Season = '$season' 
 AND GameNo > 7 ORDER by MatchNo ASC";
 $result = @mysql_query($query); // Run the query.
 $num = mysql_num_rows($result);
$query = "SELECT * from CupGames WHERE (Player1 = '$playerName' 
OR Player2 = '$playerName' OR Player3 = '$playerName' 
OR Player4 = '$playerName' OR Player5 = '$playerName'
OR Player6 = '$playerName') AND (CupID = 'CS' OR CupID = 'ND') 
AND Season = '$season' AND GameNo < 4 ORDER by CupRound ASC";
$result04 = @mysql_query($query); // Run the query.
$num = mysql_num_rows($result04);