[英]Mysql php complex query
我正在尝试进行查询,以找出一名球员是否参加了比赛,以及他的状态是否未退出(6)。 不过,以下查询无法正常工作。 我究竟做错了什么?
谢谢
$query = mysql_query("SELECT * FROM matches WHERE
(player1Name = '$name' AND player1Status != 6) ||
(player2Name = '$name' AND player2Status != 6) ||
(player3Name = '$name' AND player3Status != 6) ||
(player4Name = '$name' AND player4Status != 6) ||
(player5Name = '$name' AND player5Status != 6) ||
(player6Name = '$name' AND player6Status != 6)
");
在SQL中, ||
是连接运算符(如.
在PHP)。 改用OR
。
OR和|| 是合法的,因为它说在这里 。你可以尝试PDO格式,建议在这里 :
数据库连接是这样的(当然,还有您的数据库详细信息):
$dsn = "mysql:host=127.0.0.1;dbname=reportslave1";
$username = "root";
$password = "";
try {
$DBH = new PDO($dsn, $username, $password);
}
catch(PDOException $e) {
echo $e->getMessage();
}
准备工作是这样的:
$STH = $DBH->prepare("SELECT * FROM matches WHERE
(player1Name = :name AND player1Status != 6) OR
(player2Name = :name AND player2Status != 6) OR
(player3Name = :name AND player3Status != 6) OR
(player4Name = :name AND player4Status != 6) OR
(player5Name = :name AND player5Status != 6) OR
(player6Name = :name AND player6Status != 6)
");
$STH->bindParam(":name",$name);
然后按如下方式进行呼叫。
try {
$STH->execute();
$STH->setFetchMode(PDO::FETCH_ASSOC);
}
catch(PDOException $e){
echo $e->getMessage();
}
我建议更改您的架构的结构。 如果您发现自己创建了诸如player1Name,player1Status,player2Name,player2Status,player3Name之类的列,则您的架构几乎肯定存在问题。 你可以尝试这样的事情
matches
-------
match_id (int)
...other match info columns
players
-------
player_id (int)
player_name (varchar)
matches_players
---------------
match_id
player_id
status
您的查询便可以轻松成为
SELECT *
FROM matches_players mp
INNER JOIN players p ON mp.player_id=p.player_id
WHERE p.name='$name'
AND mp.status != 6
尝试以下代码:
$query = mysql_query("SELECT * FROM matches WHERE
(player1Name = '".$name."' AND player1Status != 6) OR
(player2Name = '".$name."' AND player2Status != 6) OR
(player3Name = '".$name."' AND player3Status != 6) OR
(player4Name = '".$name."' AND player4Status != 6) OR
(player5Name = '".$name."' AND player5Status != 6) OR
(player6Name = '".$name."' AND player6Status != 6)
");
这将起作用。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.