繁体   English   中英

MySQL PHP复杂查询

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM