اسم mysql مثل '٪ # estributes.q #٪' - لا يعود النتيجة لمباراة دقيقة؟

StackOverflow https://stackoverflow.com/questions/2441347

سؤال

لدي استعلام MySQL التالي:

SELECT  *
FROM    customer
WHERE   
fName LIKE '%#attributes.q#%' AND deleted = 'N'
OR 
lName LIKE '%#attributes.q#%' AND deleted = 'N'

يعمل هذا جيدا على التخمينات، ولكن إذا قمت بتوفير تطابق دقيق: "Bill Clinton" fname = Bill Lname = Clinton إلى الاستعلام أعلاه تحصل على 0 نتائج؟ حيث يعطي بيل كلينت النتائج.

كيف يمكن تحديث هذا الاستعلام ليقول إيجاد النتيجة ويساوي النتائج؟

هل كانت مفيدة؟

المحلول

من الصعب معرفة سؤالك، لكنني أظن أن جدول عملائك سيبدو شيئا مثل:

id    fName    lName      deleted
---------------------------------
1     John     Doe        N
2     Bill     Clinton    N
3     Fred     Smith      N
4     George   Bush       Y

استفسارك، كما ذكرت ذلك في سؤالك، لن تعمل أبدا، كما ستبدو مثل هذا:

SELECT *
FROM customer
WHERE fname LIKE '%Bill Clinton%' AND deleted = 'N'
OR
  lName LIKE '%Bill Clinton%' AND deleted = 'N'

لا توجد سجلات في الجدول حيث تحتوي حقول FNAME أو LNAME على "Bill Clinton"

سيتعين عليك تدليك النص # # # لذلك، فهذا سيؤدي إلى توليد شيء مثل هذا:

SELECT *
FROM customer
WHERE ((fName LIKE '%Bill%') OR (fName LIKE '%Clinton%')) AND deleted = 'N'
OR
   ((lName LIKE '%Bill%') etc.....

مثل المقارنات تشبه إلى حد كبير استخدام أحرف البدل في أسماء الملفات. لن يقوموا بتقسيم كتلة من النص لك، ولكنهم سيخبرونك إذا كان جزء من النص موجود، حرفيا، داخل جزء آخر من النص.

أعتقد أن ما تحتاجه هو البحث عن النص الكامل, ، والتي ستنظر في الكلمات الفردية في سلسلة الاستعلام ونتائج العودة. بالطبع، النص الكامل متاح فقط على أنواع جدول MyIISAM، لذلك إذا كنت تستخدم InnoDB أو نوع آخر، فأنت خارج الحظ.

نصائح أخرى

FYI - يمكن استخدام فهارس النص الكامل فقط مع جداول InnoDB أو MyISAM، ويمكن إنشاء أعمدة Char أو Varchar أو Text فقط.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top