从查询中添加结果列

时间:2016-04-07 21:46:23

标签: mysql

我有一个用户表,一个职位表和一个关联的users_positions表。

它看起来像(最低限度)像:

USERS
-----
id

USERS_POSITIONS
---------------
id
user_id (FK)
position_id (FK)
calendar_date (a specific date)

POSITIONS
---------
id
day (a day of the week)
title

用户可以在某个位置自愿参加零个或多个职位,该职位与calendar_date一起进入users_positions表。我填写了一个包含这些职位的表格,以及用户是否已经自愿参加该职位(这将是一个复选框)的记录,因为用户可以随时编辑他们的记录。

首先,我设法从数据库中提取位置,并设法拉出一个只返回用户自愿提供的位置的连接,但是想知道MySQL是否具有以下功能:会从查询中创建某种额外的列,它将返回所有位置,在额外的列中,将它们标记为自愿是否自愿。有了这个,我可以在生成表单时检查或取消选中包含这些信息的复选框。

我能想到的另一种方法是使用php获取当天位置行的数组,然后是连接行数组,显示用户自愿提供的行数。然后迭代它们都创建一个新数组,其中包含我在前一段中描述的数据。

如果在MySQL中有办法做到这一点,那当然是首选。 MySQL可以这样做吗?

1 个答案:

答案 0 :(得分:2)

使用LEFT JOIN。这将返回第一个表格中的所有行,即使它们与您要加入的表格不匹配也是如此。如果没有匹配,则第二个表格中的值将为NULL,您可以在显示该职位是否有志愿者时对其进行测试。

SELECT day, title, IF(up.id IS NULL, "No", "Yes") volunteered
FROM Positions AS p
LEFT JOIN Users_Positions AS up ON p.id = up.position_id AND up.user_id = @user_id