为啥查询无法使用 mysqli 选择特定 id?

Posted

技术标签:

【中文标题】为啥查询无法使用 mysqli 选择特定 id?【英文标题】:why query unable to select specific id using mysqli?为什么查询无法使用 mysqli 选择特定 id? 【发布时间】:2019-02-05 13:02:16 【问题描述】:

我在使用 mysqli 表时遇到了一个奇怪的问题。我有一个表,其中有一些记录。我正在执行以下查询

SELECT * FROM `users` WHERE 
EXISTS (
  SELECT * 
  FROM `games` 
  INNER JOIN `users_games` 
    ON `games`.`id` = `users_games`.`game_id`
  WHERE 
    `users`.`id` = `users_games`.`user_id` AND `game_id` = 10
  ) 
AND `users`.`id` = 10 
LIMIT 12;

users_games 表中,user_id = 1011 行 (1 to 13)。上述查询适用于所有人

`game_id` = 10 /* it is working */ 

当我尝试执行game_id= 1 时,它没有显示记录,但是game_id= 1 有一行。

在它下面users_games桌子

【问题讨论】:

这个问题与 php/mysqli 有关吗?如果是,请添加相关代码。您正在使用game_id= 1game_id= 10 您只向我们展示了users_games 表,但您的SQL 查询又查询了两个表,usersgames。请从您的 SQL 查询中删除这些表,或者向我们展示这两个表中的代表性行。另外,请edit您的帖子并将表格行发布为文本,而不是屏幕截图。 SQL 表/结果集根据定义是 无序 .. 在 MySQL 中使用 LIMIT 而不使用 ORDER BY无意义,并且可能导致不同的结果即使每次运行相同查询时数据都相同 user_id = 1 没有 game_id = 10 它有 game_id= 1 有人可以指导我为什么会有反对票吗?我尽力解释我面临的问题 【参考方案1】:

鉴于这些用户

select id from users;
+-----+
| id  |
+-----+
|   1 |
|   2 |
|   3 |
|   6 |
|   7 |
|   8 |
|  10 |
|  12 |
|  14 |
|  15 |
|  16 |
|  17 |
| 999 |
+-----+

还有这个

drop table if exists games,users_games;

create table games (id int);
create table users_games(user_id int, game_id int);

insert into games values (1),(10);
insert into users_games values(1,1),(1,10),(10,1);

您的查询

SELECT id FROM `users` WHERE 
EXISTS (
  SELECT * 
  FROM `games` 
  INNER JOIN `users_games` 
    ON `games`.`id` = `users_games`.`game_id`
  WHERE 
    `users`.`id` = `users_games`.`user_id` AND `game_id` = 1
  ) 
AND `users`.`id` = 10;

生产

+----+
| id |
+----+
| 10 |
+----+
1 row in set (0.00 sec)

正如预期的那样。您可以通过在问题中包含示例数据作为文本来改进您的问题(正如我在答案中所做的那样)。

【讨论】:

感谢您的回答,但很难理解我的意思是问题出在哪里,您在哪里解决了? 根据我创建的数据没有问题,因此您的数据不能与我创建的模型相同。 我真的不明白你到底在说什么

以上是关于为啥查询无法使用 mysqli 选择特定 id?的主要内容,如果未能解决你的问题,请参考以下文章

MySQLi内连接无法正常工作

每次使用不同的参数运行相同的 mysqli 查询

为啥 mysqli_insert_id() 总是返回 0?

查询使用 MYSQLI_USE_RESULT 在特定结果大小后不返回任何内容 [重复]

在 PHP 中,为啥 mysqli_num_rows 不为返回行数为 0 的查询返回整数?

为啥我无法在 PHP 和 MySQL 中获取最后一个插入 ID?