我有一个先前员工创建并且工作正常的查询。但是,我需要在其中添加一个名为' info'并且我很难接受它。 '信息' table的用户列应与users表中的user_id列匹配。
信息表包含用户(用户ID),公司,电话,全名等列。该查询当前通过电子邮件发送给注册到特定投标的用户。然后创建一个日志文件,在该日志文件中,我需要显示信息表中的信息,如公司,电话和全名。
我尝试在第一次INNER JOIN之后添加它:
INNER JOIN info
ON info.user = users.user_id
查询将运行,但在我尝试显示时,它不会从信息表中获取任何信息。
以下是有效的查询:
$sql = '
SELECT users.user_id
, users.username
FROM users
INNER
JOIN registrations
ON registrations.user = users.user_id
AND registrations.tender = '.mysql_real_escape_string($tender).'
UNION
SELECT users.user_id
, users.username
FROM users
INNER
JOIN user_divisions
ON user_divisions.user = users.user_id
INNER
JOIN tender_divisions
ON tender_divisions.division = user_divisions.division
AND tender_divisions.tender = '.mysql_real_escape_string($tender).'
WHERE
users.verified = 1
GROUP
BY users.user_id
';
答案 0 :(得分:0)
没有相同的格式
确保用户表中存在所有用户以显示所有信息数据
SELECT users.user_id
,users.username
来自信息
INNER
加入用户
ON info.user = users.user_I'd
答案 1 :(得分:0)
根据您的输入,这应该有用(我已经格式化了SQL以匹配我的风格)
SELECT users.user_id, users.username, info.*
FROM users
INNER JOIN registrations ON registrations.user = users.user_id
AND registrations.tender = '.mysql_real_escape_string($tender).'
INNER JOIN info ON info.user = users.user_id
UNION
SELECT users.user_id , users.username, info.*
FROM users
INNER JOIN user_divisions ON user_divisions.user = users.user_id
INNER JOIN tender_divisions ON tender_divisions.division = user_divisions.division
AND tender_divisions.tender = '.mysql_real_escape_string($tender).'
INNER JOIN info ON info.user = users.user_id
WHERE users.verified = 1
GROUP BY users.user_id
如果初始查询工作正常,则没有理由不起作用。
如果它没有返回任何记录,则表示您的用户表和信息表之间没有匹配项。您可以将INNER JOIN
更改为LEFT JOIN
以验证此操作。
注:
我不喜欢上次查询中的GROUP BY
。它适用于MySQL,但这不是ANSI标准,如果您移动到另一个已激活ONLY_FULL_GROUP_BY模式的数据库,您可能会遇到问题
SELECT
中的列应与GROUP BY
中的列相同。如果目的是删除重复项(看起来就像你在SELECT
中没有使用聚合函数那样)那么你应该使用DISTINCT
代替