Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/65.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 使用子选择进行选择_Php_Mysql - Fatal编程技术网

Php 使用子选择进行选择

Php 使用子选择进行选择,php,mysql,Php,Mysql,我有一个统计表,其中每一行包括玩家id、游戏id和团队id。我试图创建一个查询以返回结果,其中返回不同的游戏,其中两个或更多玩家在同一团队的游戏中一起玩。我试图创建这样的select语句,但显然这是错误的 SELECT * FROM ( SELECT * FROM stats AS t1 WHERE player_id IN (array) ) AS t2 WHERE t1.game_id=t2.game_id AND t1.team_id=t2.team_id 如果您的表具有id,则可

我有一个统计表,其中每一行包括玩家id、游戏id和团队id。我试图创建一个查询以返回结果,其中返回不同的游戏,其中两个或更多玩家在同一团队的游戏中一起玩。我试图创建这样的select语句,但显然这是错误的

SELECT * FROM (
 SELECT * FROM stats AS t1 WHERE player_id IN (array)
 ) AS t2 
WHERE t1.game_id=t2.game_id AND t1.team_id=t2.team_id

如果您的表具有id,则可以将此sql与内部联接一起使用

SELECT t1.*,t2.*
FROM stats t1
INNER JOIN stats t2 
  ON  t1.game_id=t2.game_id 
  AND t1.team_id=t2.team_id 
  AND t2.id <> t1.id
WHERE t1. player_id IN (array);
选择t1.*,t2*
来自stats t1
内部连接状态t2
在t1上。游戏id=t2。游戏id
t1.团队id=t2.团队id
和t2.id t1.id
其中t1。玩家id(数组);
您可以将选择修改为选择不同的t1。游戏id

以下是我对您的表格的结果:

MariaDB [Bernd]> SELECT * FROM softball_stats;
+-------------+-----------+---------+---------------+
| sb_stats_id | player_id | game_id | sb_stats_team |
+-------------+-----------+---------+---------------+
|           1 |       100 |       1 |          1000 |
|           2 |       100 |       2 |          1000 |
|           3 |       100 |       3 |          1010 |
|           4 |       101 |       2 |          1000 |
|           5 |       102 |       3 |          1010 |
|           6 |       103 |       1 |          1000 |
+-------------+-----------+---------+---------------+
6 rows in set (0.01 sec)

MariaDB [Bernd]> 
MariaDB [Bernd]> SELECT t1.*,t2.*
    -> FROM softball_stats t1
    -> INNER JOIN softball_stats t2 
    ->   ON  t1.game_id=t2.game_id 
    ->   AND t1.sb_stats_team=t2.sb_stats_team 
    ->   AND t2.sb_stats_id <> t1.sb_stats_id
    -> WHERE t1. player_id IN (100,101);
+-------------+-----------+---------+---------------+-------------+-----------+---------+---------------+
| sb_stats_id | player_id | game_id | sb_stats_team | sb_stats_id | player_id | game_id | sb_stats_team |
+-------------+-----------+---------+---------------+-------------+-----------+---------+---------------+
|           4 |       101 |       2 |          1000 |           2 |       100 |       2 |          1000 |
|           2 |       100 |       2 |          1000 |           4 |       101 |       2 |          1000 |
|           3 |       100 |       3 |          1010 |           5 |       102 |       3 |          1010 |
|           1 |       100 |       1 |          1000 |           6 |       103 |       1 |          1000 |
+-------------+-----------+---------+---------------+-------------+-----------+---------+---------------+
4 rows in set (0.01 sec)

MariaDB [Bernd]> 
MariaDB[Bernd]>从垒球统计数据中选择*;
+-------------+-----------+---------+---------------+
|sb|U统计| id |玩家| id |游戏| id | sb|U统计|团队|
+-------------+-----------+---------+---------------+
|           1 |       100 |       1 |          1000 |
|           2 |       100 |       2 |          1000 |
|           3 |       100 |       3 |          1010 |
|           4 |       101 |       2 |          1000 |
|           5 |       102 |       3 |          1010 |
|           6 |       103 |       1 |          1000 |
+-------------+-----------+---------+---------------+
一组6行(0.01秒)
MariaDB[Bernd]>
MariaDB[Bernd]>选择t1.*t2*
->来自垒球队
->内接垒球
->在t1上。游戏id=t2。游戏id
->t1.sb_stats_team=t2.sb_stats_team
->和t2.sb_stats_id t1.sb_stats_id
->其中t1。(100101)中的玩家id;
+-------------+-----------+---------+---------------+-------------+-----------+---------+---------------+
|sb|U统计| id |玩家| id |游戏| id | sb|U统计|团队| sb|U统计| id |玩家|游戏| id | sb|U统计|团队|
+-------------+-----------+---------+---------------+-------------+-----------+---------+---------------+
|           4 |       101 |       2 |          1000 |           2 |       100 |       2 |          1000 |
|           2 |       100 |       2 |          1000 |           4 |       101 |       2 |          1000 |
|           3 |       100 |       3 |          1010 |           5 |       102 |       3 |          1010 |
|           1 |       100 |       1 |          1000 |           6 |       103 |       1 |          1000 |
+-------------+-----------+---------+---------------+-------------+-----------+---------+---------------+
一组4行(0.01秒)
MariaDB[Bernd]>

这个问题与PHP有什么关系?您能提供一些数据和基于您的数据的示例结果吗?对不起,我将尝试删除PHP标记谢谢,我认为我没有为表分配id。每行有一个主键。我需要给整个表分配一个id,或者给每一列分配一个id,或者两者都分配吗?没关系,我使用了行id,并且完成了查询。唯一的问题是它返回了任何一个球员参加的每一场比赛,而不仅仅是他们都参加/参加的比赛和球队。它应该返回一个非常小的集合,可能像数千条记录中的2或3条结果。@Jim-你能发布创建表和一些示例数据,然后发布链接吗。我认为你不必让一个id字段改变你主键的名称。这只是为了隐藏其自身的组合。sqlfiddle.com网站不适合我。够不着。下面是我的表的缩写create语句--phpMyAdmin SQL转储--4.9.5版--Server版本:5.6.41-84.1--PHP版本:7.3.27--table
softball\u stats
create table
softball\u stats
sb\u stats\u id
int(11)不为空,
player\u id
int(3)不为空,
game\u id
int(3)不为空,
sb\u stats\u team
int(4)默认为空,)引擎=InnoDB默认字符集=latin1;--表
垒球统计数据的索引
--更改表
垒球统计数据
添加主键(
sb\u统计数据id
),添加键
player\u id
player\u id
),添加键
sb\u统计数据团队
sb\u统计数据团队
),添加键
game\u id
game\u id
)--转储表格的自动增量----表格
垒球统计数据的自动增量
--更改表格
垒球统计数据
修改
sb\u统计数据id
int(11)非空自动增量--