दो जटिल MYSQL प्रश्नों को मर्ज करें - mysql

मैं दो जटिल MYSQL प्रश्नों को मर्ज करने के तरीके पर सहायता चाहता हूं।

प्रश्न 1:

SELECT  p.*
FROM    posts p
INNER JOIN
(
SELECT  a.ID
FROM    posts a
INNER JOIN post_tags b
ON a.ID = b.post_ID
WHERE   a.post LIKE "%mmmm%" AND
b.tagname IN ("#test","#iseeyou")
GROUP   BY ID
HAVING  COUNT(DISTINCT b.tagname) = 2
) sub ON p.ID = sub.ID
ORDER   BY p.upvotes DESC, p.unix_timestamp DESC

प्रश्न 2:

SELECT p.*, ((upvotes + 1.9208) / (upvotes + downvotes) - 1.96 * SQRT((upvotes * downvotes)
/ (upvotes + downvotes) + 0.9604) / (upvotes + downvotes))
/ (1 + 3.8416 / (upvotes + downvotes)) AS ci_lower_bound
FROM posts p WHERE upvotes + downvotes > 0
AND p.unix_timestamp BETWEEN 1363023402 AND 1363109802 ORDER BY ci_lower_bound DESC

एक छोटी टेबल परिभाषा दी गई है एसक्यूएल फिडल

असल में, पहला एक खोज क्वेरी है औरदूसरा, पिछले 24 घंटों में वोटों के आधार पर सबसे लोकप्रिय परिणाम देता है, इसलिए मैं दूसरे में इस्तेमाल किए गए फॉर्मूला के आधार पर खोज क्वेरी का उपयोग करना चाहता हूं और समय सीमा भी

उत्तर:

जवाब के लिए 0 № 1

कम से कम कुछ इस तरह के बदलाव के साथ (अगर मुझे समझ में आया कि आप सही तरीके से क्या चाहते हैं)

SELECT  p.*, ((upvotes + 1.9208) / (upvotes + downvotes) - 1.96 * SQRT((upvotes * downvotes)
/ (upvotes + downvotes) + 0.9604) / (upvotes + downvotes))
/ (1 + 3.8416 / (upvotes + downvotes)) AS ci_lower_bound
FROM    posts p
INNER JOIN
(
SELECT  a.ID
FROM    posts a INNER JOIN post_tags b  ON a.ID = b.post_ID
WHERE   a.post LIKE "%mmmm%" AND b.tagname IN ("#test","#iseeyou")
GROUP   BY ID
HAVING  COUNT(DISTINCT b.tagname) = 2
) sub ON p.ID = sub.ID
WHERE upvotes + downvotes > 0
AND p.unix_timestamp BETWEEN 1363023402 AND 1363109802
ORDER BY ci_lower_bound DESC

संभवतः एक स्पर्श को चारों ओर स्वैप करने के लिए अधिक कुशलउप-चयन पर WHERE क्लॉज (इस तरह का अग्रणी% इंडेक्स का उपयोग नहीं करेगा, इसलिए शायद पोस्ट_टैग पर आसानी से अनुक्रमित चेक के खिलाफ उसमें शामिल होने के लिए अधिक कुशल))

SELECT  p.*, ((upvotes + 1.9208) / (upvotes + downvotes) - 1.96 * SQRT((upvotes * downvotes)
/ (upvotes + downvotes) + 0.9604) / (upvotes + downvotes))
/ (1 + 3.8416 / (upvotes + downvotes)) AS ci_lower_bound
FROM    posts p
INNER JOIN
(
SELECT  a.ID
FROM    post_tags b STRAIGHT_JOIN posts a ON a.ID = b.post_ID
WHERE   a.post LIKE "%mmmm%" AND b.tagname IN ("#test","#iseeyou")
GROUP   BY ID
HAVING  COUNT(DISTINCT b.tagname) = 2
) sub ON p.ID = sub.ID
WHERE upvotes + downvotes > 0
AND p.unix_timestamp BETWEEN 1363023402 AND 1363109802
ORDER BY ci_lower_bound DESC

संबंधित सवाल
सबसे लोकप्रिय