簡體   English   中英

在MySQL上優化簡單查詢

[英]Optimization of a Simple Query on MySQL

我有腳本:

SELECT *, (pbct_hits + (COUNT(likes.rvw_usr_like) * 5) - (COUNT(unlikes.rvw_usr_like)) * 5) AS score
FROM tb_publications
LEFT JOIN tb_reviews_users likes ON likes.rvw_usr_fk_publication = pbct_id AND likes.rvw_usr_like IS TRUE
LEFT JOIN tb_reviews_users unlikes ON unlikes.rvw_usr_fk_publication = pbct_id AND unlikes.rvw_usr_like IS FALSE
GROUP BY pbct_id
ORDER BY score DESC;

我不想對同一張表進行兩次聯接。

我相信可以優化上面的腳本,但是我沒有。

編輯

問題解決了:

-- Final Script:
SELECT pbct.*
FROM tb_publications pbct
LEFT JOIN tb_reviews_users ON rvw_usr_fk_publication = pbct_id
GROUP BY pbct_id
ORDER BY
(
(pbct_hits * 1) +
((SUM(CASE WHEN rvw_usr_like IS TRUE THEN 1 ELSE 0 END)) * 5) -
((SUM(CASE WHEN rvw_usr_like IS FALSE THEN 1 ELSE 0 END)) * 5)
) DESC, pbct_record ASC;

基於@MikeSmithDev的答案。

關於什么

SELECT pbct_id, 
score = 
  (pbct_hits + 
     ((SUM(CASE WHEN rvw_usr_like IS TRUE THEN 1 ELSE 0 END)) * 5) -
     ((SUM(CASE WHEN rvw_usr_like IS FALSE THEN 1 ELSE 0 END)) * 5))
    FROM tb_publications
    LEFT JOIN tb_reviews_users likes ON likes.rvw_usr_fk_publication = pbct_id 
    GROUP BY pbct_id

那應該工作...或者用PHP方面的數學在SQL中做一些簡單的事情

我不會在查詢中做類似的數學運算。 我會做:

SELECT *
FROM tb_publications
LEFT JOIN tb_reviews_users review_users ON review_users.rvw_usr_fk_publication = pbct_id
GROUP BY pbct_id

那我會在php中手動做數學

$score = 0;
if($row['rvw_usr_like'])
   $score += 5;

此外,根據您是更喜歡插入喜歡還是顯示得分,您可能需要考慮在發布表中存儲匯總得分。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM