Paul Dixon'un cevabı benim için harika çalıştı. Buna eklemek için, REGEXP kullanmakla ilgilenenler için gözlemlediğim bazı şeyler:
Joker Karakterlerle birden çok LIKE filtresi gerçekleştirmek için:
SELECT * FROM fiberbox WHERE field LIKE '%1740 %'
OR field LIKE '%1938 %'
OR field LIKE '%1940 %';
REGEXP Alternatifini Kullan:
SELECT * FROM fiberbox WHERE field REGEXP '1740 |1938 |1940 ';
REGEXP tırnak içindeki ve | (VEYA) operatörü joker karakter olarak kabul edilir. Genellikle, REGEXP%.% 1740 olarak çalışmak için (. *) 1740 (. *) Gibi joker karakter ifadeleri gerektirir.
Joker karakterin yerleşimi üzerinde daha fazla denetime ihtiyacınız varsa, bu değişkenlerden bazılarını kullanın:
Kontrollü Joker Karakter Yerleşimi ile GİBİ Gerçekleştirmek İçin:
SELECT * FROM fiberbox WHERE field LIKE '1740 %'
OR field LIKE '%1938 '
OR field LIKE '%1940 % test';
kullanın:
SELECT * FROM fiberbox WHERE field REGEXP '^1740 |1938 $|1940 (.*) test';
Değerin önüne ^ yerleştirilmesi satırın başlangıcını gösterir.
Değerin arkasına $ yerleştirmek satır sonunu gösterir.
(. *) Yerleştirme% joker karakterine çok benzer.
. satır sonları hariç herhangi bir karakteri belirtir. Yerleştirme. inside () ile * (. *), satır sonuna kadar istediğiniz sayıda karakteri gösteren yinelenen bir desen ekler.
Belirli eşleşmeleri daraltmanın daha etkili yolları vardır, ancak Düzenli İfadelerin daha fazla gözden geçirilmesini gerektirir. NOT: Tüm regex kalıpları MySQL deyimlerinde çalışmıyor gibi görünmektedir. Desenlerinizi test etmeniz ve neyin işe yaradığını görmeniz gerekir.
Son olarak, Birden Çok GİBİ ve GİBİ DEĞİL filtreleri gerçekleştirmek için:
SELECT * FROM fiberbox WHERE field LIKE '%1740 %'
OR field LIKE '%1938 %'
OR field NOT LIKE '%1940 %'
OR field NOT LIKE 'test %'
OR field = '9999';
REGEXP Alternatifini Kullan:
SELECT * FROM fiberbox WHERE field REGEXP '1740 |1938 |^9999$'
OR field NOT REGEXP '1940 |^test ';
VEYA Karışık Alternatif:
SELECT * FROM fiberbox WHERE field REGEXP '1740 |1938 '
OR field NOT REGEXP '1940 |^test '
OR field NOT LIKE 'test %'
OR field = '9999';
NOT setini ayrı bir WHERE filtresinde ayırdım. Negatif kalıpları, ileriye dönük kalıpları vb. Kullanmayı denedim. Bununla birlikte, bu ifadelerin istenen sonuçları verdiği görülmemiştir. Yukarıdaki ilk örnekte, tam eşleşmeyi belirtmek için ^ 9999 $ kullanıyorum. Bu, aynı ifadede joker karakter eşleşmeleriyle belirli eşleşmeler eklemenizi sağlar. Ancak, listelenen ikinci örnekte gördüğünüz gibi bu tür ifadeleri de karıştırabilirsiniz.
Performansla ilgili olarak, mevcut bir tabloya karşı bazı küçük testler yaptım ve varyasyonlarım arasında hiçbir fark bulamadım. Bununla birlikte, performansın daha büyük veritabanları, daha büyük alanlar, daha fazla kayıt sayısı ve daha karmaşık filtrelerle ilgili bir sorun olabileceğini düşünüyorum.
Her zaman olduğu gibi, yukarıdaki mantığı mantıklı olarak kullanın.
Düzenli ifadeler hakkında daha fazla bilgi edinmek istiyorsanız, iyi bir referans sitesi olarak www.regular-expressions.info adresini öneriyorum.
WHERE FIND_IN_SET(f.fiberbox, "1740,1938,1940")