মাইএসকিউএল কোয়েরি স্ট্রিংয়ে রয়েছে


307

আমি মাইএসকিউএল দিয়ে কীভাবে একটি ক্যোয়ারী তৈরি করতে পারি তা সনাক্ত করার চেষ্টা করেছি $haystackযা একটি নির্দিষ্ট কলামের মান (স্ট্রিং ) এর মধ্যে কিছু নির্দিষ্ট ডেটা (স্ট্রিং $needle) রয়েছে কিনা তা পরীক্ষা করে দেখায়:

mysql_query("
SELECT *
FROM `table`
WHERE `column`.contains('{$needle}')
");

পিএইচপি-তে, ফাংশনটি বলা হয় substr($haystack, $needle), তাই হতে পারে:

WHERE substr(`column`, '{$needle}')=1

উত্তর:


437

বেশ সহজ আসলে:

mysql_query("
SELECT *
FROM `table`
WHERE `column` LIKE '%{$needle}%'
");

%যে কোন অক্ষর সেট (কিছুই নয়, এক বা অনেক) জন্য একটি ওয়াইল্ড কার্ড নেই। মনে রাখবেন যে এটি খুব বড় ডেটাসেটগুলিতে ধীরে ধীরে পেতে পারে তাই আপনার ডাটাবেসটি বৃদ্ধি পেলে আপনাকে ফুল টেক্সট সূচকগুলি ব্যবহার করতে হবে।


1
এটি যদি আপনার প্রস্তুত ক্যোয়ারী ব্যবহার করে তবেই কাজ করবে। আপনি যদি সেখানে একটি প্রকৃত স্ট্রিং ব্যবহার করছেন (উদাঃ তরলবিক স্কেল আপগ্রেড স্ক্রিপ্ট) তবে নীচে উল্লিখিত INSTR বিবেচনা করুন)। এটি কারণ যদি আপনার স্ট্রিংয়ে যদি%% থাকে তবে আপনি এর সাথে জিনিসগুলি মিলে যাওয়া শুরু করবেন।
রায়ান শিলিংটন

2
আমি কোয়েরিজগুলির মতো জানি এবং এখনও আজ আমি এটি জানতে চেয়েছিলাম যে কোনও কলামে স্ট্রিংয়ের জন্য নির্দিষ্ট মান রয়েছে কিনা আমি এটির জন্য গুগল করছি .. কেন আমি এর আগে কখনও ভাবিনি ??
সিজলিং কোড

1
এই ক্ষেত্রে সংবেদনশীল?
রাগ করেছেন কিউই

2
@্যাংরি_কিউই: column LIKE '...'এটির ক্ষেত্রে সংবেদনশীল, column LIKE BINARY '...'এটি ক্ষেত্রে সংবেদনশীল
ওল্ফ

2
আমি অবাক হয়েছি যে LIKEকোনও অপ্রস্ট্রিং পরীক্ষা করার প্রস্তাব দেওয়া হয়েছে যেহেতু এই অপারেটর দুটি ওয়াইল্ডকার্ড অক্ষর ব্যবহার করে: %এবং _। এর অর্থ যদি আপনার স্ট্রিং $ সুইতে এই একটি বিশেষ অক্ষর থাকে তবে ফলাফলগুলি মোটেও প্রত্যাশিত হয় না। (-1) এই জবাবের জন্য এবং (+1) INSTR জবাবের জন্য।
Skrol29

144

ব্যবহার করুন:

SELECT *
  FROM `table`
 WHERE INSTR(`column`, '{$needle}') > 0

রেফারেন্স:


অবশ্যই লাইক ইএনএসটিআরের চেয়ে দ্রুত?
খ্রিস্ট

17
@ অয়েডো: নির্ভর করে। LIKE %...%যদি উপস্থিত থাকে তবে কোনও সূচক ব্যবহার করবে না, তাই তাদের সমতুল্য হওয়া উচিত; LIKE ...%উপস্থিত থাকলে একটি সূচক ব্যবহার করবে। কর্মক্ষমতা যদি সত্যিকারের উদ্বেগ হয় তবে পূর্ণ পাঠ্য অনুসন্ধান (এফটিএস) আরও ভাল পদ্ধতির হতে পারে।
ওএমজি পনিস

নিখুঁত। আমি যা খুঁজছিলাম তা ঠিক
আরিক

2
আমি এই সমাধানটি পছন্দ করি কারণ প্রকৃতপক্ষে likeঅপারেটরের সাথে স্ট্রস্ট্রিংয়ের উপস্থিতি অনুসারে জিনিসগুলি সাজানোর কোনও উপায় নেই is instrএকটি বাক্যাংশের সাথে এটি অর্ডার করা যেতে পারেselect * from table order by instr(col1,"mystring")
রাডাকিনা

আমি কোনও ক্ষেত্রে _ অনুসন্ধান করতে চেয়েছি এবং এটি কার্যকর হয়েছে। ধন্যবাদ
সেফার আহমেদ

53
WHERE `column` LIKE '%$needle%'

2
অক্ষরটি অনুসন্ধান করার সময় _ (আন্ডারস্কোর) কোয়েরিটি '% _%' পছন্দ করে না, কোনও কারণে এটি _ ছাড়াই সমস্ত স্ট্রিং ফেরত দেয়
ওয়াজটেক

1
@ ওয়াজটেক _ হ'ল যে কোনও একটি চরিত্রের জন্য ওয়াইল্ডকার্ড, সুতরাং আপনি যদি আক্ষরিক আন্ডারস্কোর অনুসন্ধান করতে চান তবে আপনাকে এড়াতে হবে। আন্ডারস্কোর সহ মাইএসকিউএল লাইক কোয়েরি দেখুন ।
jkmartindale

29

মাইএসকিএল-এ ব্যবহার LOCATEকরছে:

LOCATE (সাবস্ট্র্ট, স্ট্র), LOCATE (সাবস্ট্র, স্ট, পোস্ট)

এই ফাংশনটি মাল্টি-বাইট নিরাপদ, এবং কেবলমাত্র সংক্ষিপ্ত সংবেদনশীল তবে যদি কমপক্ষে একটি যুক্তি বাইনারি স্ট্রিং হয়।

আপনার ক্ষেত্রে:

mysql_query("
SELECT * FROM `table`
WHERE LOCATE('{$needle}','column') > 0
");

11
'কলাম' কলাম হওয়া উচিত (উদ্ধৃতি ব্যতীত)
ওয়াজটেক

10

@ ওওলপিএইচ থেকে উত্তর ছাড়াও।

LIKEকীওয়ার্ডটি ব্যবহার করার সময় আপনার কাছে স্ট্রিংটি কোন দিকে মেলে তা সীমাবদ্ধ করার ক্ষমতাও রাখে। উদাহরণ স্বরূপ:

আপনি যদি একটি স্ট্রিং খুঁজছিলেন যা আপনার সাথে শুরু হয় $needle:

... WHERE column LIKE '{$needle}%'

আপনি যদি একটি স্ট্রিং খুঁজছিলেন যা এর সাথে শেষ হয় $needle:

... WHERE column LIKE '%{$needle}'

3

সচেতন থাকুন যে এটি বিপজ্জনক:

WHERE `column` LIKE '%{$needle}%'

প্রথমে কর:

$needle = mysql_real_escape_string($needle);

সুতরাং এটি সম্ভাব্য আক্রমণ প্রতিরোধ করবে।


7
* কিছু সম্ভাব্য আক্রমণ। এছাড়াও, mysql_real_escape_stringভবিষ্যতের পিএইচপি রিলিজগুলিতে হ্রাস করা হবে।
জ্যাক টাক

11
আপনি প্রস্তুত বিবৃতি ব্যবহার করা উচিত , এবং পিএইচপি ছেড়ে পালাতে হবে। $stmt = $dbh->prepare("Where 'column' LIKE '{:needle}'"); $stmt->bindParam(':needle', $needle); $stmt->execute();
ক্লাউডওয়ার্কস 3:25

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