2016-09-20 9 views
1

これらは私のテーブルです:投票で応募作品を注文するには?

CREATE TABLE IF NOT EXISTS `entries` (
    `id` int NOT NULL AUTO_INCREMENT, 
    `title` text, 
    `date` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, 
    PRIMARY KEY (`id`) 
) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ; 


id title date 
1 aaa 2016-09-15 19:00:00 
2 bbb 2016-09-14 19:00:00 
3 ccc 2016-09-13 19:00:00 
4 ddd 2016-09-12 19:00:00 
5 eee 2016-09-11 19:00:00 


CREATE TABLE IF NOT EXISTS `votes` (
    `id` int NOT NULL AUTO_INCREMENT, 
    `id_entry` int, 
    PRIMARY KEY (`id`) 
) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ; 

id id_entry 
1 1 
2 1 
3 1 
4 2 
5 3 

私は日付によって、その後の投票によってすべてのエントリを注文するとする方法が必要、だから私はこのクエリ書いた:

SELECT COUNT(entries.id) as totvotes, entries.id, entries.date FROM entries LEFT JOIN votes ON entries.id=votes.id_entry GROUP by entries.id ORDER by totvotes DESC, entries.date DESC 

をし、その結果がこれです:

totvotes entries.id entries.date 
3  1   2016-09-15 19:00:00 
1  2   2016-09-15 19:00:00 
1  3   2016-09-15 19:00:00 
1  4   2016-09-15 19:00:00 
1  5   2016-09-15 19:00:00 

ご覧のとおり、投票では投票なし(4と5)のエントリに対しては、totvotes = 1と表示されます。どうすればそれを避けることができますか?

答えて

1

SELECT COUNT(entries.id)の代わりにvotes.id_entryとカウントするだけです。

だから、これを試してみてください。SELECT COUNT(votes.id_entry) as totvotes...

COUNTに関するいくつかの微妙な点:

SELECT COUNT(0); Result: 1 

SELECT COUNT(-1); Result: 1 

SELECT COUNT(NULL); Result: 0 

SELECT COUNT(71); Result: 1 

SQL FIDDLE

関連する問題