MYSQL IF语句为不同的WHERE子句

时间:2014-04-28 19:58:56

标签: php mysql sql

我试图在我的应用上解决问题,我有这个问题试图让它运作。

SELECT * FROM articles
(IF articles.type = 1, INNER JOIN members ON members.id_member = articles.author_id,
INNER JOIN company ON company.id_company = articles.author_id) AS user
WHERE articles.tipe = '1' AND  user = '1';

我有一个发布文章的系统,但同一个用户可以发布他的名字或他创建的公司的名称,所以,我想做的是,如果文章.tipe是类型1,然后文章由他的公司发布,如果不是,它的类型0,然后由他发布他自己的名字,如果我只使用其中的1,他们将获得混合,我试过不同的方法,但似乎没有一个适合我,有人可以帮忙吗?

3 个答案:

答案 0 :(得分:0)

你可以离开加入两个表。对于每个文章记录,其中一个连接的记录将具有值,另一个将具有所有空值。您可以在列或案例表达式上使用coalesce。

SELECT a.*, coalesce(m.name,c.name) as username
FROM articles a
LEFT JOIN members m ON m.id_member = a.author_id and a.type = '0'
LEFT JOIN company c ON c.id_company = a.author_id and a.type = '1'
WHERE a.user = '1';

答案 1 :(得分:0)

您应该使用内部联接来仅获取具有文章类型= 1的成员ID和公司ID的文章。所以article_type条件将进入where条件,我们将使用内部联接与成员和公司表。

以下查询将提供所有文章类型

的文章
select * from articles INNER JOIN members ON members.id_member = articles.author_id INNER JOIN company ON company.id_company = articles.author_id  where articles.type=1 and user=1

如果您认为我不能正确理解您的问题,请添加更多说明。希望这会对你有所帮助。

答案 2 :(得分:0)

要根据文章类型使用条件连接获取article_type = 0和article_type = 1的记录,以下是查询:

select * from (

  select article.type,article.name,member.name as user from articles INNER JOIN members                         ON members.id_member = articles.author_id where article_type=0

 UNION ALL

 select article.type,article.name,company.name as user from articles INNER JOIN members       ON members.id_member = articles.author_id INNER JOIN company ON company.id_company = articles.author_id  where article_type=1

)as tmptbl;