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);