【发布时间】:2013-01-05 16:27:54
【问题描述】:
假设我有这条 sql 行:
SELECT (something)
FROM user_data, user_profile_image
WHERE user_data.user_id='6' (AND user_profile_image.user_id='6')
如果 user_profile_image 中没有包含与该用户相关的数据,我如何确保它从 user_data 字段返回信息?
【问题讨论】:
假设我有这条 sql 行:
SELECT (something)
FROM user_data, user_profile_image
WHERE user_data.user_id='6' (AND user_profile_image.user_id='6')
如果 user_profile_image 中没有包含与该用户相关的数据,我如何确保它从 user_data 字段返回信息?
【问题讨论】:
你需要使用JOIN
SELECT u.*,i.user_profile_image FROM user_data u LEFT JOIN `USER_PROFILE_IMAGE_TABLE` i ON i.user_id=u.user_id WHERE u.user_id='6'
我不确定您的 USER_PROFILE_IMAGE_TABLE 是什么,因此您需要更改它。
【讨论】:
users LEFT JOIN profile_images ON users.user_id=profile_images.user_id WHERE profile_images.user_id = '". $uid ."' AND users.user_id = '".$uid ."' LIMIT 1
SELECT something
FROM user_data
LEFT JOIN user_profile_image
ON user_profile_image.user_id = user_data.user_id
WHERE user_data.user_id = '6'
AND user_profile_image.user_id IS NULL;
你想LEFT JOIN详情页的外键字段等于第一个表的主键字段,并从第一个表中选择行,使得第二个表中没有匹配的行。
在您提供的查询中,没有连接条件,因此它将是笛卡尔积 - user_data 的每一行与 user_profile_image 的每一行合并。
【讨论】:
user_profile_image 匹配到user_data?
user_profile_image属于哪个user_data?我的意思不是外键约束,但是两个表中存在的值是什么来等同于它们?要么user_data.user_id 也出现在user_profile_image 中,要么user_profile_image 有一个也出现在user_data 中的关键字段(例如user_profile_image_id)。你能把你的模式和查询放在 sqlfiddle.com 上吗?
试试这个:
SELECT u.user_id, u.user_name, IFNULL(up.user_id, 'No Data In user_profile_image') UserId,
IFNULL(up.user_image_id, 'No Data In user_profile_image') user_image_id
FROM user_data u
LEFT JOIN user_profile_image up ON u.user_id = up.user_id
WHERE u.user_id = 6;
查看此链接SQL FIDDLE DEMO
【讨论】: