php - A Restrictive WHERE IN SQL Statement With UNION -


मेरे पास निम्न तालियां हैं:

  • कार्ड
  • अपलोड
  • टैग
  • टैग_अपलोड : एक टैग और एक के बीच संबंध
  • card_tag ​​: टैग और कार्ड के बीच संबंध।

    कार्ड 1 का टैग "ईवेंट", " आरएमसी "और" रोगी "।

    अपलोड 1 का टैग" ईवेंट "और" रोगी "के साथ संबंध है।

    अपलोड 2 का टैग" ईवेंट "के साथ संबंध है, "Rmc", और "रोगी"।

    प्रश्न 1:

    मैंने टैग "ईवेंट" और "रोगी" का चयन किया है।

    इसे वापस करना चाहिए अपलोड 1, अपलोड 2, और कार्ड 1।

    प्रश्न 2:

    मैंने टैग "ईवेंट", "आरएमसी", और "रोगी" का चयन किया है।

    इसे अपलोड 1 और कार्ड 1 को वापस करना चाहिए।

    समस्या:

    मैं वर्तमान में निम्नलिखित का उपयोग कर रहा हूं, लेकिन जब मैं यह क्वेरी 2 करता हूं, तो प्रश्न 1 के रूप में वापस आ जाता है:

    क्या ऐसा प्रश्न दिखता है कि कोई कार्ड चुन सकता है अगर इसमें टैग होता है? क्या आप एक उदाहरण या तर्क प्रवाह का उपयोग देख सकते हैं जो आप उपयोग कर सकते हैं?

    यह मेरा पहला संस्करण है जो मैं चाहता हूँ नीचे लाने के लिए। PHPSpec के साथ ही सही testable कोड में बदल जाएगा।

    समाधान

    आपका धन्यवाद! उदासी!

      SELECT * FROM (का चयन करें cards.id, cards .name, cards.type, cards.updated_at, cards.created_at, cards.image कार्ड से कार्ड से कनेक्ट करें card_tag ​​ON card_tag.card_id = cards.id card_tag.tag_id = tags.id पर टैग जोड़ें। टैग जहां हटाए गए हैं और कार्ड नहीं.प्रकार नहीं IN ('', 'पुस्तकालय') और cards.account_user_id = 1 और tags.name IN ('rmc', 'test') कार्डों के माध्यम से समूह। आईडी होस्टिंग COUNT (DISTINCT tags.id) = 1 UNION ALL SELECT Uploads.id , Uploads.name, uploads.type, uploads.updated_at, uploads.created_at, uploads.image अपलोड से जुड़ें tag_upload पर टैग_upload.upload_id = uploads.id टैग टैग पर अपलोड करें टैग। टैग_id = tags.id जहां टैग नहीं। हटाए गए और अपलोड टाइप करें ('', 'पुस्तकालयों') और अपलोड करें। Account_user_id = 1 और tags.name IN ('rmc', 'test') GROUP द्वारा uploads.id होस्टिंग COUNT (DISTINCT tags.id) = 2) क्यूरी के रूप में ORDER `Updated_at` DESC LIMIT 0, 35    

    एक शुरुआती बिंदु के रूप में, अपनी टेबल में शामिल होने, परिणामों को समूहित करने और फ़िल्टर करने पर विचार करें:

      चुनें cards.id, कार्ड.नाम, कार्ड.प्रकार, कार्ड.अपडेटेड_ट, कार्ड.सैटेड_आइट, कार्ड्स.आम कार्ड से कार्ड कार्ड पर टाइप करें card_tag.card_id = cards.id card_tag.tag_id = tags.id पर टैग जोड़ें, जहां हटाई नहीं गई और कार्ड नहीं। टाइप करें नहीं ('', 'पुस्तकालय') और cards.account_user_id =? और टैग। नाम IN ('घटना', 'रोगी') कार्ड के माध्यम से ग्रुप। आईडी होस्टिंग COUNT (अलग टैग.id) = 2   

    यदि (card_id, tag_id) < / code> गारंटीकृत को card_tag ​​ में अद्वितीय होने के लिए, कोई भी COUNT (DISTINCT tags.id) को अधिक प्रदर्शनकर्ता के साथ बदल सकता है (*)

    तब एक UNION अपलोड तालिका पर एक समान क्वेरी के साथ हो सकता है।

Comments

Popular posts from this blog

Verilog Error: output or inout port "Q" must be connected to a structural net expression -

jasper reports - How to center align barcode using jasperreports and barcode4j -

c# - ASP.NET MVC - Attaching an entity of type 'MODELNAME' failed because another entity of the same type already has the same primary key value -