2014-11-02 78 views
-2

我有以下查询:合并2个查询与不同的WHERE子句

select 
* 
from 
(
SELECT art_titel as at, COUNT(*) as Number1 
FROM artikel_views 
WHERE user_id != '' 
GROUP BY art_titel 
ORDER BY Number1 desc 
) as FirstSet 
join 
(
SELECT art_titel as at, COUNT(*) as Number2 
FROM artikel_views 
WHERE user_id = '' 
GROUP BY art_titel 
ORDER BY Number2 desc 
) as SecondSet 
on FirstSet.at = SecondSet.at 

我的HTML表:

<table> 
    <tr> 
    <td>Art Titel</td> 
    <td>user_id is NULL</td> 
    <td>user_id is not NULL</td> 
    </tr> 

<?php while($row = mysql_fetch_assoc($res)) { ?> 

    <tr> 
    <td><?php echo $row['at']; ?></td> 
    <td><?php echo $row['Number2']; ?></td> 
    <td><?php echo $row['Number1']; ?></td> 
    </tr> 

<?php } ?> 

</table> 

我要做的就是从$行[ '数字1']取值和$ row ['Number 2']结合art_titel。 该查询的结果不好。在这两个查询中,我只有art_titel和art_titel上art_titel的匹配,但效果并不好。我需要两种方式的所有项目。

我也试过一个联盟,但是不是我的方式工作。

+0

什么问题? – AdamMc331 2014-11-02 19:57:24

+0

@ McAdam331:我已更新我的问题 – 2014-11-02 20:00:10

+0

如果没有任何样本数据或预期结果(我建议您在下次提问时加入,如果您有雄心壮志,可以编辑这一个),但很难说清楚,但您可以尝试联盟,看看是否有效。 – AdamMc331 2014-11-02 20:03:06

回答

0

不需要2个查询,只需使用CASE条件。

SELECT art_titel as at, SUM(CASE WHEN user_id != '' THEN 1 ELSE 0 END) as Number1, 
SUM(CASE WHEN user_id = '' THEN 1 ELSE 0 END) as Number2 
FROM artikel_views 
GROUP BY art_titel 
ORDER BY Number1 desc,Number2 desc 
+0

如果我使用$ row ['Number1 ']和$ row ['Number2']是与art_titel相同的值,并且这些值在我的数据库中不相同。那么到底发生了什么问题? – 2014-11-02 20:15:34

+0

@BrechtS我不知道你在说什么...... – Mihai 2014-11-02 20:17:37

+0

@ Mihai:我想用查询的输出填充我的HTML表格。为此,我使用$ row ['at']为我的表的第一列中的值赋值art_titel和$ row [Number1'],为我表中第二列中的值赋值$ row ['Number2'] 。 Number 1和Number2中的值现在在我的表中是相同的。但在我的数据库中不是。 – 2014-11-02 20:21:34