PHP'nin preg_replace bir MySQL eşdeğeri var mı?

3 Cevap php

Ben bir ben normal bir ifade kullanabilirsiniz hangi düşünce için, MySQL bir alanı eşleştirmek zorunda, ama o MySQL işi yapmak için ihtiyacım özelliğe sahip olmadığını görünür. İşte senaryo:

PHP bir değişken $ url denilen var. Kullanıcının bu değişken dize "/ article/my-article/page/2" olarak ayarlanır diyelim. Ben de içeriği çekmek istiyorum hangi MySQL URL'lerin bir tablo var. Benim tabloda depolanan URL'ler, ancak joker içerir.

"/ Haber /% / sayfa /%": tabloda depolanan değeri bu gibi görünüyordu ki, daha önce, ben bu kurmuştu.

Bu yapılandırma ile, ben sadece çalıştırabilir:

SELECT * FROM urls WHERE '$url' LIKE url

Ve bu istenen işlevselliği olan maç olacaktır.

Ben şimdi yapmak istediğim şey, daha gelişmiş bir joker, izin de onun yerine "/ haber /% / sayfa /%" arasında benim MySQL veri "/ haber / {{}} sülük / sayfa / {{olabilir böyle page_no}} ".

Ben aynı $ url girişini kullanarak, bu verileri eşleşen bir SQL sorgusu oluşturmak istiyorum. Ben yerleşik "%" joker kullanarak değil, {{. *}} Değilim beri GİBİ, artık doğru karşılaştırma. Herhangi bir fikir bunu gerçekleştirmek nasıl?

3 Cevap

Ben bir çözüm buldum. İdeal değil, ama ben saf SQL çözüm yüzeyleri asla halinde buraya koyacağım. Ben "/ articles /% / sayfa /%" eşit MySQL url alanını terk ve kullanılacak değişken adlarının listesini depolar değişkenleri olarak adlandırılan başka bir alan ekleyebilirsiniz. Ben verileri alındıktan ettik sonra sonra sprintf PHP ile "{{değişken}}" ile dönüş değeri "%" karakterler yerine, benim özgün sorguyu kullanabilirsiniz yolu.

Yine de, eğer mümkünse ben kavram değerli olduğunu düşünüyorum çünkü bu, SQL çözülmüş görmek istiyorum.

Ne yapmak istediğiniz URL'leri size php tabanlı (sprintf) değişken değiştirme kodu geçmek, ama yine URL maç için orijinal karşılaştırmalar yapmak mümkün olacaktır tutucular var veritabanında yeni bir sözdizimi var gibi geliyor.

Eğer doğru anlamak, yeni bir URL biçimini almak istiyorum

/article/{{slug}}/page/{{page_no}}

ve benzeri bir şey karşı maç

/article/my-article/page/2

Gebelik eklentisi sagi sözü size GİBİ sözdizimini kullanarak maçı belirlemek için kullanılan özgün biçime yeni biçimlendirilmiş URL'lerin birini dönecek ihtiyacınız ikame yapabilir. Aşağıdaki sorgu:

SELECT PREG_REPLACE('/({{.*?}})/', '%', `url`) FROM urls;

Başlangıçta ne içine yeni url (/ haber / {{}} sülük / sayfa / {{}} page_no) açacak

/article/%/page/%

Daha sonra, özgün sorgu aracılığıyla böyle bir şey geri beslenir edilebilir:

SELECT * FROM urls
WHERE '/article/my-article/page/2' LIKE preg_replace('/({{.*?}})/', '%', `url`);

MAMP, XAMMP gibi bazı ikili dağılımları vb yüklü eklenti var, ama bu MacPorts / Ubuntu gibi sistemleri bir sürü yüklü değil. İşte gebelik eklenti yükleme hakkında makaleler bir çift vardır. Umarım yardımcı olur.

http://quickshiftin.com/blog/2011/04/installing-mysql-preg-plugin-osx-macports/

http://quickshiftin.com/blog/2011/12/installing-the-mysql-preg-plugin-on-ubuntu-with-apt-get/

Sen kullanabilirsiniz regex in MySQL