2014-10-17 63 views
1

加入我有这样的查询如何选择,其中左在MySQL

SELECT tb_post.*, 
     (SELECT GROUP_CONCAT(DISTINCT tb_category.category_name) 
     FROM tb_category 
     LEFT JOIN tb_terms ON tb_terms.parent_1 = tb_category.category_id 
     WHERE tb_terms.post_id = `tb_post`.post_id and category_type="post" 
     GROUP BY tb_terms.post_id) AS parent1 
FROM (`tb_post`) 

enter image description here

但这其中不运行。这总是返回表中的所有行..我想添加在哪里为什么?

我不想改变形状查询和我我需要tb_post所有的数据,但其中tb_category.category_type = $值,不更改查询

+0

无关的你的主要问题,但你的子查询使用LEFT OUTER JOIN,而且还检查WHERE子句中左连接表中列的值。至于任何非匹配列将有一个NULL值,它不可能匹配tb_post.post_id(它看起来像一个唯一的ID)。因此,它将它呈现为有效的INNER JOIN。 – Kickstart 2014-10-17 10:38:04

回答

1

的结构如果u不需要tb_post *然后删除,因为它从调用数据库中,如果所有的数据内层查询获得较少的记录,那么tb.post那么它也显示最高纪录(tb_post)

+0

我需要tb_post的所有数据,但tb_category.category_type ='$ value' – 2014-10-17 06:59:13

+0

在tb_term和category表中有任何常见字段? – Affan 2014-10-17 07:01:06

+0

是的,tb_terms.parent_1是加入tb_category .... 这个参考http://www.grocerycrud.com/documentation/options_functions/set_relation_n_n – 2014-10-17 07:03:42

0

使用INNER JOIN:

SELECT tb_post.*, tc.categories 
FROM tb_post 
INNER JOIN (
    SELECT tb_terms.post_id, GROUP_CONCAT(DISTINCT tb_category.category_name) AS categories 
    FROM tb_category 
    LEFT JOIN tb_terms ON tb_terms.parent_1 = tb_category.category_id 
    WHERE tb_category.category_type="post" 
    GROUP BY tb_terms.post_id 
) tc ON tc.post_id = tb_post.post_id 
+0

hy Rimas。谢谢你,这是非常有用的,但我有另一个问题如何把你的查询功能 - > http://notepad.cc/share/ghmy0Ko78c – 2014-10-17 07:54:00

+0

你的问题还不清楚。最简单的方法就是返回这个查询:'protected function relation_n_n_queries($ select){return“SELECT tb_post。* ...和查询的其余部分...”; }' – Rimas 2014-10-17 08:55:49

+0

Rimas非常感谢你。但是由你编码并且由@Kickstart合并非常好 – 2014-10-17 20:06:38

0

最好SOLU重刑将是修改您的查询@Rimas建议,但与生成该查询的功能的片段,我看不到足以看到如何做到这一点。

如果这是不可能的,那么我会被诱惑有点滥用HAVING子句和做这样的事情: -

SELECT tb_post.*, 
     (SELECT GROUP_CONCAT(DISTINCT tb_category.category_name) 
     FROM tb_category 
     INNER JOIN tb_terms ON tb_terms.parent_1 = tb_category.category_id 
     WHERE tb_terms.post_id = `tb_post`.post_id 
     AND category_type="post" 
     GROUP BY tb_terms.post_id) AS parent1 
FROM (`tb_post`) 
HAVING parent1 IS NOT NULL 
+0

好。它真的帮助了我。非常感谢你 。你拯救了我的生命^ _ ^ – 2014-10-17 20:05:46