মাইএসকিউএল একাধিক মান পছন্দ করে


144

আমার এই মাইএসকিউএল কোয়েরি আছে।

এই বিষয়বস্তু সহ আমার কাছে ডাটাবেস ক্ষেত্র রয়েছে

sports,shopping,pool,pc,games 
shopping,pool,pc,games 
sports,pub,swimming, pool, pc, games   

এই মত কোয়েরি কাজ করে না কেন? আমার কাছে খেলাধুলা বা পাব উভয়ই ক্ষেত্র দরকার?

SELECT * FROM table WHERE interests LIKE ('%sports%', '%pub%')

উত্তর:


133

(a,b,c)তালিকা শুধুমাত্র সঙ্গে কাজ করে in। জন্য like, আপনি ব্যবহার করতে হবে or:

WHERE interests LIKE '%sports%' OR interests LIKE '%pub%'

3
এটি একাধিক ক্ষেত্রে উপকারী হবে না (আসুন 5 বা আরও গতিশীল অনুসন্ধানযোগ্য ক্যোয়ারী বলি), সুতরাং, রিজেক্সপ ব্যবহার করা ভাল।
শায়ান আহমেদ

315

এটি করার দ্রুততর উপায়:

WHERE interests LIKE '%sports%' OR interests LIKE '%pub%'

এটি কি:

WHERE interests REGEXP 'sports|pub'

এই সমাধানটি এখানে পেয়েছে : http://forums.mysql.com/read.php?10,392332,392950#msg-392950

রিগেক্স সম্পর্কে আরও এখানে: http://www.tutorialspPoint.com/mysql/mysql-regexps.htm


আপনি যদি একটি স্ট্রিং (a | b | c ...) হিসাবে অজানা পরিমাণে কীওয়ার্ড দিয়ে যাচ্ছেন, আপনি লাইক করতে চান তবে রেজিএক্সপাইজ একমাত্র উপায়, তাই না?
ঘন ঘন

1
আপনি কি জানেন যে এটি একটি subquery দিয়ে করা যেতে পারে? ধরা যাক আমার কাছে শব্দের একটি কলাম আছে যা আমার সন্ধান করতে হবে, আমি কীভাবে 'স্পোর্টস | পাব' উপকুলের সাথে প্রতিস্থাপন করতে পারি?
অ্যাডামএমসি 331

আরে, আপনি কি দয়া করে আমাকে% LIKE% এর পরিবর্তে REGEXP বলতে পারেন, আমি সঠিক স্ট্রিং আনার চেষ্টা করছি ...
দীপংশু গোয়েল

3
এই দ্রবণটি প্রথমটিকে পানির বাইরে ফেলে দেয়
ডোনাতো

2
একটি কলাম থেকে (select group_concat(myColumn separator '|') from..)
regexp

34

আপনি কেন REGEXP চেষ্টা করবেন না। এটির মতো চেষ্টা করুন:

SELECT * FROM table WHERE interests REGEXP 'sports|pub'

5
হ্যাঁ !! আমি এটি বিপরীত উপায় চাই। সুতরাং এটি হল SELECT * FROM table WHERE interests NOT REGEXP 'sports|pub' (> ‿◠) ✌
Pathros

3
আপনার jazkatউত্তরের 5 বছর আগে জমা দেওয়া উত্তর থেকে এই উত্তরটি কীভাবে আলাদা ?
বৈদাস

@ বৈদাস - আপনাকে ধন্যবাদ - নিজেকে একই প্রশ্ন জিজ্ঞাসা করছিল ...: ডি
দ্য ফ্রিডিসি

18

আপনি পাশাপাশি ব্যবহার করতে পারেন RLIKE

উদাহরণ স্বরূপ:

SELECT * FROM TABLE_NAME WHERE COLNAME RLIKE 'REGEX1|REGEX2|REGEX3'

6
প্রত্যেকের জন্য কেবল দ্রষ্টব্য যে RliKE এবং REGEXP সমার্থক শব্দ
ইন্টাকো

8

আপনার জিজ্ঞাসা করা উচিত SELECT * FROM `table` WHERE find_in_set(interests, "sports,pub")>0

আমি যা বুঝতে পারি তা হ'ল আপনি আপনার টেবিলের একটি ক্ষেত্রে আগ্রহগুলি সংরক্ষণ করেন যা একটি ভুল ধারণা। আপনার অবশ্যই একটি "আগ্রহ" সারণী থাকা উচিত।


2
আমি মনে করি এটি হওয়া উচিত SELECT * FROM table WHERE find_in_set(interests, 'sports,pub'), তবে এই কৌশলটি বেশিরভাগ পরিস্থিতিতে রেজেক্সকে ছাড়িয়ে যায়।
ক্রিস স্ট্রিকল্যান্ড

7

আপনি যদি কোনও ANDপ্যারামিটারের পরে এই ফাংশনটি ব্যবহার করেন তবে বন্ধনী ব্যবহার করতে ভুলবেন না

এটার মত:

WHERE id=123 and(interests LIKE '%sports%' OR interests LIKE '%pub%')

3

বা আপনার যদি কেবল শব্দের শুরুতে মেলানো দরকার:

WHERE interests LIKE 'sports%' OR interests LIKE 'pub%'

আপনি regexp ক্যারেট মিলগুলি ব্যবহার করতে পারেন:

WHERE interests REGEXP '^sports|^pub'

https://www.regular-expressions.info/anchors.html



1

কাজের আরও উদাহরণ:

SELECT COUNT(email) as count FROM table1 t1 
JOIN (
      SELECT company_domains as emailext FROM table2 WHERE company = 'DELL'
     ) t2 
ON t1.email LIKE CONCAT('%', emailext) WHERE t1.event='PC Global Conference";

একাধিক সংস্থার ডোমেনের সমান ইমেল এক্সটেনশানটি যদি টাস্ক ফিল্টার সহ একটি ইভেন্টে অংশ নেওয়া হয়েছিল।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.