if else语句在mysql where子句中

时间:2013-06-09 12:04:35

标签: mysql

我正在尝试使用连接从2个表中获取用户详细信息和配置文件图像。问题是并非所有用户都有prof图像因此我必须在where子句中使用if条件。没有教授照片的用户默认为0,因为他们的教授照片图像0不属于任何人,其余人有他们的教学照片ID 例如17。

if tb1.user_pic > 0 Then 
  choose their profile image
else 
   choose a default image.

SELECT tb1.user_id , tb1.full_names , tb1.user_email , tb1.user_pic , tb1.userName , 
tb2.img_id , tb2.img_format , tb2.img_by , tb2.img_album
FROM users as tb1
LEFT JOIN images as tb2
ON tb2.img_by = tb1.user_id
WHERE tb1.user_id = '$session_id' && tb2.img_id = tb1.user_pic
ORDER BY tb1.user_id 

上述查询将为没有prof pic的用户返回没有结果的问题。我认为条件语句可能有用但我不知道在这种情况下如何使用它们。

2 个答案:

答案 0 :(得分:0)

我想建议一个可能的替代方案,它会极大地简化,并且可能会加速(尽管你应该像所有优化声明一样衡量),查询。

考虑在用户加入时为用户分配默认图像,然后只允许他们覆盖它。这样,每个用户都有一个可以完全相同的方式提取的图像,无论他们是否配置了一个。

而且,除非您为数百万用户进行规划,否则空间要求不会太繁重。

您仍然可以在表格中维护一个字段,以说明是否已选择真实图像,即使技术上可能违反3NF。大多数人都没有意识到,但只要你理解和/或减轻可能出现的问题,做这种事情(通常用于表现或简化)是很好的。

答案 1 :(得分:0)

对要从图像中检索的所有列使用子查询。不要在那里使用加入。

 SELECT tb1.user_id, tb1.full_names, tb1.user_email, tb1.user_pic, tb1.userName, 

        IsNull((select tb2.img_id from images tb2 where tb2.img_id = tb1.user_pic and tb2.img_by = tb1.user_id), 0) AS img_id, 

        IsNull((select tb2.img_format from images tb2 where tb2.img_id = tb1.user_pic and tb2.img_by = tb1.user_id), 'jpg') AS img_format,

        IsNull((select tb2.tb2.img_album from images tb2 where tb2.img_id = tb1.user_pic and tb2.img_by = tb1.user_id), 'default') AS img_album

 FROM users as tb1

 WHERE tb1.user_id = '$session_id'
 ORDER BY tb1.user_id 

虽然我不确定在MySQL中是否存在IsNull(,)或其语法。您可以为没有个人资料照片的用户设置默认图片网址。