Mysql
 sql >> डेटाबेस >  >> RDS >> Mysql

MySQL ::अल्पविराम से अलग किए गए स्ट्रिंग से चयन करें

अपने स्कीमा को सामान्य करने के लिए बेहतर है कि संबंधों को अल्पविराम से अलग सूची के रूप में संग्रहीत न करें इसके बजाय इसके लिए एक जंक्शन तालिका बनाएं जैसे m:m बनाए रखें उपयोगकर्ताओं और फ़िल्टर के बीच अनेक से अनेक संबंध, user_filters . के रूप में एक नई तालिका बनाएं कॉलम फ़िल्टर आईडी और उपयोगकर्ता आईडी के साथ और प्रत्येक पंक्ति में प्रति उपयोगकर्ता एक एसोसिएशन सहेजें और फ़िल्टर 1 के लिए अपने वर्तमान स्कीमा संबंध की तरह कई उपयोगकर्ताओं के साथ फ़िल्टर करें (1, '1, 2, 3') जैसा हो जाएगा

filter id user id
    (1, '1'),
    (1, '2'),
    (1, '3'),

नमूना स्कीमा इस तरह होगा

CREATE TABLE user_filters
    (`fid` int, `u_id` varchar(50))
;

INSERT INTO user_filters
    (`fid`, `u_id`)
VALUES
    (1, '1'),
    (1, '2'),
    (1, '3'),
    (2, '5'),
    (2, '5')
;

CREATE TABLE filters
    (`id` int, `title` varchar(50))
;

INSERT INTO filters
    (`id`, `title`)
VALUES
    (1, 'test'),
    (2, 'test 1')
;


CREATE TABLE users
    (`id` int, `name` varchar(6))
;

INSERT INTO users
    (`id`, `name`)
VALUES
    (1, 'Tom'),
    (2, 'Tim'),
    (3, 'Sue'),
    (4, 'Bruce'),
    (5, 'Ann'),
    (6, 'George')
;

उपरोक्त स्कीमा के लिए आप आसानी से शामिल होने के साथ क्वेरी कर सकते हैं, नीचे क्वेरी को इंडेक्स का उपयोग करके अनुकूलित किया जा सकता है

select u.* 
from users u
join user_filters uf on(uf.u_id = u.id)
 where uf.fid =1

नमूना डेमो

यदि आप अपनी स्कीमा को बदलने में सक्षम नहीं हैं और वर्तमान के साथ रहना चाहते हैं तो आप नीचे के रूप में पूछ सकते हैं लेकिन उपरोक्त क्वेरी की तुलना में इसे पर्याप्त रूप से अनुकूलित नहीं किया जा सकता है

select u.* 
from users u
join filters f on(find_in_set(u.id,replace(`u_ids`,' ','')) > 0)
 where f.id =1 

नमूना डेमो

डेटाबेस नॉर्मलाइज़ेशन




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. जेपीए + हाइबरनेट:डिलीट कैस्केड पर होने वाली बाधा को कैसे परिभाषित करें

  2. स्तंभ मान के आधार पर विभिन्न तालिकाओं में शामिल होना

  3. अपरिभाषित अनुक्रमणिका:C:\wamp\www\Website\storeadmin\admin_login.php.. में उपयोगकर्ता नाम और पासवर्ड के लिए समान

  4. PHP - सफलतापूर्वक हटाए गए रिकॉर्ड को कैसे सत्यापित करें

  5. चयनित कॉलम में संगत प्रकार नहीं है, यहां तक ​​कि इसका एक ही प्रकार है