2015-08-25 3 views
-1

У меня вопрос.MySQL PHP Order from Another Table

У меня есть 2 таблицы, одна включает комментарии, а другая включает в себя голоса этих комментариев.

мои комментарии таблица:

-------------------- 
comment_id | comment 
    1  abc1 
    2  abc2 
    3  abc3 
    4  abc4 
-------------------- 

мой голосования стол:

------------------ 
user_id comment_id | voted 
    1   1   1 // comment 1 has the result +1 now 
    2   1   1 // comment 1 has the result +2 now 
    3   1   2 // comment 1 has the result +1 now 
    4   4   1 // comment 4 has the result +1 now 
    5   4   2 // comment 4 has the result 0 now 
------------------ 

Ну, если человек любит комментарий, оно сохраняется как " 1 ", чтобы" проголосовали ". Если человеку не нравится комментарий, он сохраняется как «2» для «проголосовали».

$likes = $db->query('SELECT * FROM voting WHERE voted=1')->num_rows; 
$dislikes = $db->query('SELECT * FROM voting WHERE voted=2')->num_rows; 
$the_result = $likes-$dislikes; 

Например, когда 5 человек понравился комментарий и 2-х человек не любил тот же комментарий, результат я показать, «+3».

Я хочу отсортировать их с помощью наибольшего результата.

Например: первый комментарий к показу будет иметь +4, второй, чтобы показать, будет +2, третий для показа будет -2.

Я хочу сделать это на PHP. Спасибо за помощь.

Извините за мое плохое объяснение, это мой первый вопрос здесь. :(

+2

Есть что-нибудь, что вы пробовали еще? Любой код? – user5173426

+0

и в чем ваш вопрос? – CodeGodie

+0

Я пока не думал о каких-либо решениях. –

ответ

1

Я хотел бы попробовать следующее:

SELECT *, 
    (count(CASE WHEN vote = 1 then 1 ELSE NULL END) - (count(CASE WHEN vote = 2 then 1 ELSE NULL END))) as RESULT 
FROM comments AS c 
LEFT JOIN votes as v ON c.comment_id=v.comment_id 
GROUP BY c.id 
ORDER BY RESULT desc 
+0

Я считаю, что это правильно, но я не могу заставить его работать. Почему:/ –

+0

"mysqli_fetch_assoc() ожидает, что параметр 1 будет mysqli_result, boolean given." Не могу ли я использовать его с mysqli_fetch_assoc? –

+0

Вы не должны получать эту ошибку. Можете ли вы показать код, который используете? – CodeGodie

1

Подсчет голосов:

Возврат только comment_id и всего голосов: Check the code

SELECT comment_id, SUM(
    CASE voted 
    WHEN 1 THEN 1 
    ELSE -1 
    END) AS total 
FROM voting 
GROUP BY comment_id 
ORDER BY total DESC; 

Выводится с комментариями, что имеет голосов: Check the code

SELECT comment_id, comments, SUM(
    CASE voted 
    WHEN 1 THEN 1 
    ELSE -1 
    END) AS total 
FROM voting 
INNER JOIN comments 
    USING(comment_id) 
GROUP BY comment_id 
ORDER BY total DESC; 

Возврат всех строк: Check the code

SELECT comment_id, comments, SUM(
    CASE voted 
    WHEN 1 THEN 1 
    ELSE -1 
    END) AS total 
FROM voting 
RIGHT JOIN comments 
    USING(comment_id) 
GROUP BY comment_id 
ORDER BY total DESC; 
+0

Я не определял «проголосовали». Я просто получаю «нравится», а затем «не любит», и я использую математические «симпатии-неприязни», чтобы получить результат. –

+0

Как я уже сказал, система сохраняет «1», если кто-то любит комментарий. И система сохраняет «2», чтобы проголосовать, если кому-то не нравится комментарий. –

+0

И я использую запрос $ db-> ('SELECT * FROM vote WHERE voted = 1') -> num_rows "и" $ db-> query ('SELECT * FROM vote WHERE voted = 2') -> num_rows " –