मेरे पास नीचे की तरह दो टेबल हैं। लेकिन मुझे पूछताछ करने में परेशानी हुई। मैं उन सभी पोस्ट को क्वेरी करना चाहता हूं जो समूह में सदस्य can_view_group के बराबर है, और can_view_group कॉलम प्रकार JSON है।

मैं केवल JSON_CONTAINS जानता हूं और जहां (कॉलम) IN मुझे काम पूरा करने में मदद कर सकता है, लेकिन मैं वास्तव में इसे काम नहीं कर सकता। मैं इसे कैसे काम कर सकता हूं?

धन्यवाद।

पी.एस. मैं सिर्फ सादा एसक्यूएल कोड चाहता हूं क्योंकि जब मैं इसे PHP कोड या किसी अन्य चीज पर लागू करता हूं तो यह सबसे आसान होना चाहिए।


                post
----------------------------------------
     post_id    |    can_view_group    |
----------------------------------------
        1       |   ["1","2","3"]      |
----------------------------------------

              member_group
----------------------------------------
    member_id   |       group_id       |
----------------------------------------
      123       |           1          |
----------------------------------------
      123       |           2          |
----------------------------------------


-2
tommyvca 2 जुलाई 2018, 18:30

1 उत्तर

सबसे बढ़िया उत्तर

कॉमा से अलग की गई स्ट्रिंग और MySQL के डीनॉर्मलाइज़्ड फंक्शन FIND_IN_SET को प्राप्त करने के लिए मल्टीपल नेस्टेड REPLACE फ़ंक्शंस का उपयोग करना सबसे आसान है, जो कॉमा सेपरेटेड स्ट्रिंग के साथ काम करता है।

क्वेरी

SELECT 
 *
FROM 
 post 
INNER JOIN
 member_group
ON
 FIND_IN_SET(member_group.group_id , REPLACE(REPLACE(REPLACE(post.can_view_group, '"', ''), '[', ''), ']', ''))

डेमो देखें http://sqlfiddle.com/#!9/37e997/5

एक नकारात्मक पहलू यह है कि आप कभी भी इस दृष्टिकोण के साथ किसी अनुक्रमणिका का उपयोग करने में सक्षम नहीं होंगे।

सबसे अच्छा विकल्प अभी भी सामान्य करना है, लेकिन इसके लिए निश्चित रूप से एक आवेदन परिवर्तन की आवश्यकता होगी।

0
Raymond Nijland 2 जुलाई 2018, 18:55