Bunu programatic olarak yapsanız daha makul sanki çünkü işin içinde mantıksal bir işlem var.

SQL ile when case oluşturarak yapabilirsiniz lakin o kadar mühendisliğe luzum yok.

Çalışır sorguda istediğiniz gibi çalışmaz.

Sorguyu biraz düzenlemekte fayda var. Ayrıca çalışacak mantığıda belirtirseniz daha stabil ve köklü bir çözüm yolu önerilebilir.

"SELECT * FROM sayfalar WHERE onay='1' and (lower(url) like '%$search%' OR lower(etiketler) like '%$search%' OR lower(title) LIKE '%$search%' OR lower(aciklama) like '%$search%')"

BOLD olan yerlerdeki kısım tüm sayfalar için geçerlimidir ? Bu sorguyu parçalasak? Bu kadar çok arka arkaya OR kullanmak neden? OR ilk koşul true döndüğünde diğerlerinin hiç birine bakmaz.

Yani siz "search" değerini gönderdiğinizde "lower(etiketler) like '%$search%' OR lower(title) LIKE '%$search%' OR lower(aciklama) like '%$search%'" bu kısmı kaale almaz bile..

Sorguyu mantıksal algoritmaya koyup, yeniden refaktor etmekte fayda var onun içinde ne koşulda hangi koşul çalışacak belirtirseniz iyi olur ;)