Премини към съдържанието
streleca_stz

Сортиране и извеждане на общ брой резултати спрямо втора таблица?

Препоръчан отговор


Привет хора,

Имам нужда от помощ със заявката ми. Искам да направя следното - имам 3 таблици - една за главните резултати, една за гласове за отделните резултати и една за коментари към резултатите. Проблемът ми е, че искам да ги сортирам по най-висок положителен рейтинг, но нещо не ми се получава. Стигнах до тук:

SELECT r.*, COUNT(DISTINCT c.comm_id) as comms, COUNT(DISTINCT u.vote_id) as ups, COUNT(DISTINCT d.vote_id) as downs 
FROM rows r
LEFT JOIN rows_comms c ON (c.item_id = r.item_id)
LEFT JOIN votes u ON (u.group_id = r.item_group_id AND u.item_id = r.item_id AND u.vote = 1)
LEFT JOIN votes d ON (d.group_id = r.item_group_id AND d.item_id = r.item_id AND u.vote = 0)
WHERE r.approved = 1
ORDER BY ups DESC LIMIT 4"

Но не визуализира правилно когато има негативни и позитивни вотове за даден запис / резултат. Къде по-точно греша в заявката си и ако има по-оптимален начин за селектиране на нужните ми данни ще се радвам ако ме поправите!

 

EDIT:

Всъщност мисля, че открих решение на проблема си, като даже намалих с 1 джойн заявката. Ще се радвам ако някой по-компетентен каже дали правилно съм я направил с цел по-добра оптимизация на самото селектиране!

SELECT 
	r.row_id
	COUNT(CASE WHEN v.vote = 1 THEN 'up' end) as ups, 
	COUNT(CASE WHEN v.vote = 0 THEN 'down' end) as downs, 
	COUNT(DISTINCT c.comm_id) as comms
FROM rows r
LEFT JOIN comms c ON (c.row_id = r.row_id)
LEFT JOIN votes v ON (v.group_id = r.row_group_id AND v.item_id = r.row_id)
WHERE r.row_approved = 1
GROUP BY r.row_id ORDER BY ups DESC, comms DESC, r.row_added DESC LIMIT 4

 

Редактирано от streleca_stz (преглед на промените)

Сподели този отговор


Линк към този отговор
Сподели в други сайтове

Регистрирайте се или влезете в профила си за да коментирате

Трябва да имате регистрация за да може да коментирате това

Регистрирайте се

Създайте нова регистрация в нашия форум. Лесно е!

Нова регистрация

Вход

Имате регистрация? Влезте от тук.

Вход

×

Информация

Поставихме бисквитки на устройството ви за най-добро потребителско изживяване. Можете да промените настройките си за бисквитки, или в противен случай приемаме, че сте съгласни с нашите условия за ползване.