Karakter Sayısına Göre Mysql Sonuç ?
-
Veri tabanında bir mail listesi var ve ben info@site.com şeklinde veya i***@site.com gibi arama kriteri girdim ve 13 karakterli olanları getirtmek istiyorum, mantığı nasıl ? Şuan verileri autocomplete ile getiriyorum yazdığım harflere göre.
Bunu strlen ile mysql sorgu sırasındamı yoksa şuanki kullandığım kodlamada sonuçlar gelirken substr ile mi yapacağım. sonuç geldiğinde strlen ile karakter sayısını alıp substr ile sınırlama denedim olmadı, şu şekilde yaptım.
$q=$_POST['aranan']; $sql_res=mysql_query("select * from mailler where mail like '%$q%' order by id LIMIT 100"); while($row=mysql_fetch_array($sql_res)) { $fname=$row['mail']; $re_fname='<span style=": #ffff00;"><strong>'.$q.'</strong></span>'; $final_fname = str_ireplace($q, $re_fname, $fname); $karaktersayisi=strlen($final_fname); $mailler= substr($final_fname, - $karaktersayisi); echo $mailler; } -
Tüm işi sorgu üzerinden yapıp doğrudan dönen tüm kayıtları kullansan yeter.
Şöyle bir fiddle yaptım, incele : http://www.sqlfiddle.com/#!2/243a1/1
-
Teşekkürler, çalıştırdım, ben veri geldikten sonra yaptım fakat bu daha iyi oldu, extra kodtan kurtulmuş oldum, peki şöyle bişey yapılabilir mi, ben şuanda aranan mailin sadece yıldızdan önceki ilk harfini alıyorum yıldızdan sonraki harfide alsam nasıl bi aramayla birebir varsa sonuç döndürebilirim, şuanda çalışan mysql komutu aşağıdaki gibi
$ilkharf=explode('*',$email); $sql_res=mysql_query("select * from mailler where mail REGEXP '^".$ilkharf[0]."' And CHAR_LENGTH(mail) = '$sayi' order by id LIMIT 50");
yani m********i@hotmail.com böyle bir kriter var ve veritabanındada mailadresi@hotmail.com var yani aynı karakter sayısı ve başı m ile başlayıp i ile biten tüm adresler gibi bişey yapılabilir mi. -
Sonunda hepsini yapabildim, biraz uğraştırdı, başka problem kalmadı.
