en olası bazı girdileri düşünelim Bu sorgu, ilk adı 'John' olan tüm insanları seçecek; Ayrıca soyadı 'John' olan tüm insanları (örneğin, veritabanındaki tüm Johnsons'ları) seçecektir. Benzer şekilde, ikinci girdi ilk ismi 'Smith' olan tüm insanları seçecektir; Ayrıca soyadı 'Smith' (örneğin, Smithsons ve Smithers) içeren tüm kişileri de seçecektir. Çok uzak çok iyi; büyük/küçük harfe duyarlılık sorunları nedeniyle mükemmel değil (buradaki büyük küçük harf duyarlılıklarını görmezden geleceğim, ama muhtemelen göz ardı etmemelisiniz), ama sorun olmayacaktır.
Üçüncü girdi sadece ilk adı 'John Smith' olan kişileri seçecektir; Ayrıca soyadı “John Smith” i içeren kişileri de seçecektir. Bununla birlikte, bu kriterleri karşılayan çok az insanın olması muhtemeldir - John Smith adındaki insanlar sadece ilk adette John ve soyadıyla sadece Smith olacaktır. Aklında olan şey bu olması olası değildir.
Tabloda 'fullname' adında bir sütunun olup olmadığı net değil. Bunu yaparsanız, ilk ad ve soyadı yerine ayrı ayrı eşleştirmek yerine yalnızca bu sütuna karşı eşleşebilirsiniz. Eğer yapmazsanız, belki böyle bir sütun üretebilir ve sonra sorguyu buna karşı çalıştırabilirsiniz.
SELECT *
FROM (SELECT firstname || ' ' || lastname AS fullname, ... FROM people) AS t
WHERE t.fullname LIKE '%user_submitted_data%'
Bu, oldukça iyi çalışır. Bununla birlikte, eğer 'Charles De Gaulle' (ya da 'Charles de Gaulle') ya da 'Michael van den Berg' gibi isimlerden endişe ediyorsanız, birileri 'Charles Gaulle' ya da 'girerse eşleşme başarısız olur.' Michael Berg ', izin ver Michael Vandenberg. Kullanıcı girdisindeki herhangi bir boşluk karakterini de '%' simgesiyle değiştirmeniz gerekecektir. O zaman bile, sözlerin, kullanıcı tarafından verilen sırayla görünmesi gerektiği problemi ile karşı karşıya kalırsınız - ki bu önemli olmayabilir, ancak bunun fark edilmeyeceğine bilinçli olarak karar vermelisiniz. Örneğin, eğer girdi “Adam John Smith” ise, sorgu 'John Adam Smith'i yakalamaz; Eğer giriş 'Smith, John' ise, o zaman kimseyi almayacaktır (büyük ihtimalle).
Bunu yönetmek istiyorsanız, muhtemelen kullanıcının girişini belirtmeli ve ayrı sözcükleri aramalısınız.Bir sözcüğün alt dizesini soran birisine dikkat edin (örneğin, bir kişi bir isim sözcüğü olarak 'de' diye sorar) - Şu anda sorguların hiçbiri, kullanıcı giriş kelimelerinin değerlerde tam kelimelerle eşleşmesini sağlar (John vs Johnson), ve SQL standart LIKE operatörü ile bunu yapmak neredeyse imkansız.
Teşekkürler, düzeltiyor. – Jimmy