您想要的结果类似于OUTER JOIN
- 当某些记录仅存在于一个表中而不存在于另一个表中时,将显示其中一个连接表中的所有行,并用值OUTER JOIN
填充另一个表中的缺失字段。NULL
要纯粹在 SQL 中解决您的特定问题,您可以创建第二个表,其中包含一个字段,其中包含user_id
您希望能够在结果中显示的所有值。就像是:
+-----------+
| user_id |
+-----------+
| 1 |
+-----------+
| 2 |
+-----------+
| 3 |
+-----------+
| ... |
+-----------+
| 12344 |
+-----------+
| 12345 |
+-----------+
| 12346 |
+-----------+
| ... |
+-----------+
等等。如果第二个表名为all_ids
,则可以通过如下修改查询来获得所需的结果(确切的语法可能因数据库实现而异):
SELECT
*
FROM
all_ids AS i
LEFT OUTER JOIN
my_table AS t ON i.user_id = t.user_id
WHERE
i.user_id = 12345
OR i.user_id = 987654321;
这应该产生以下结果集:
+-----------+----------+----------+----------+
| user_id | point_1 | point_2 | point_3 |
+-----------+----------+----------+----------+
| 12345 | NULL | NULL | NULL |
+-----------+----------+----------+----------+
| 987654321 | NULL | NULL | NULL |
+-----------+----------+----------+----------+
应该注意的是,这个充满 ID 的表可能会占用大量磁盘空间。MySQL 中的一个整数列可以容纳 4,294,967,296 个 4 字节值,或者 16 GB 的数据,纯粹是为了方便您显示一些您没有的其他数据。因此,除非您需要一些较小的范围或一组可用的 ID,或者您的耳朵有磁盘空间,否则这种方法可能根本不实用。
就个人而言,我一开始不会要求数据库这样做。本质上这是一个显示问题;您已经从查询未返回某些行这一事实中获得了所需的所有信息。我将解决数据库之外的显示问题,在您的情况下,这意味着用 PHP 填充那些零。