2017-10-03 10 views
5

में यूनियन का उपयोग करके कोई रिकॉर्ड वापस नहीं लौटाती है तो मेरे पास दो तालिका नाम 'सक्रियता' & 'archived_activities' है। मैं अपनी गतिविधियों के टेबल रिकॉर्ड को एक और टेबल रिकॉर्ड में समर्पित करता हूं। क्रियाकलाप तालिका में उपयोगकर्ताओं की केवल पहली 200 नवीनतम गतिविधियां होती हैं और शेष रिकॉर्ड archived_activities तालिका में स्थानांतरित हो जाता है। अब मैं केवल दोनों टेबल में शामिल होना चाहता हूं जब गतिविधियां तालिका वापस आती हैं तो मैं उसी ऑफसेट का उपयोग करना चाहता हूं और अगले रिकॉर्ड लाने के लिए archived_activities तालिका के लिए सीमा का उपयोग करना चाहता हूं। नीचे मेरी क्वेरी है कि ठीक काम नहीं कर रहा है।यदि पहली तालिका MySQL क्वेरी

SELECT * FROM activities WHERE user_id=87 LIMIT 180,20 
UNION ALL 
SELECT * FROM activities WHERE user_id=87 LIMIT 180,20 

लेकिन इस क्वेरी ठीक नहीं काम कर रहे।

किसी भी मदद की?

उत्तर

1

आप NOT EXISTS() उपयोग कर सकते हैं:

SELECT * FROM activities 
WHERE user_id=87 
LIMIT 180,20 
UNION ALL 
SELECT * FROM archieve_activities 
WHERE NOT EXISTS(SELECT 1 FROM activities 
       WHERE user_id = 87) 
    AND user_id=87 
LIMIT 180,20 
+0

कोशिश कर सकते हैं लेकिन क्या होता है, तो पहली तालिका 100 रिकॉर्ड कहना है, और 100 इसलिए संग्रह मेज से दिलवाया जाना चाहिए? –

+0

"केवल जब गतिविधियां तालिका वापस आती हैं तो मैं .." ऐसा लगता है जैसे यह मामला नहीं है .. आइए ओपी के लिए @TimBiegeleisen – sagi

2

एक दृष्टिकोण यहाँ एक तार्किक तालिका में दोनों वर्तमान और संग्रहीत रिकॉर्ड प्राप्त करने के लिए एक संघ करने के लिए होगा, लेकिन उन्हें ऑर्डर करने के लिए ऐसी है कि वर्तमान रिकॉर्ड उच्च प्राथमिकता मिलता है, चाहिए वे जीवित हैं। मैं वर्तमान रिकॉर्ड के लिए 1 की स्थिति और संग्रहीत रिकॉर्ड में 2 को असाइन करता हूं। फिर, मैं इस स्थिति से आदेश देता हूं और 200 रिकॉर्ड बनाए रखता हूं।

SELECT col1, col2, ... 
FROM 
(
    SELECT col1, col2, ..., 1 AS position 
    FROM activities 
    WHERE user_id = 87 
    UNION ALL 
    SELECT col1, col2, ..., 2 
    FROM archived_activities 
    WHERE user_id = 87 
) t 
ORDER BY 
    position 
LIMIT 200; 
+0

टिप्पणी करने के लिए प्रतीक्षा करें @RizwanSaleem की तुलना में बेहतर समाधान की तरह लगता है – sagi

0

आपने इस क्वेरी

select * from activities as a 
union all 
select * from archived_activities as b 
where b.user_id not in 
(select r.user_id 
from activities as r) 
संबंधित मुद्दे