Kullanıcı Them için geri gitmek, böylece PHP / MySQL Sayfalar arasında Kullanıcı Aramalar saklanması

2 Cevap php

Ben bir php-mysql uygulama yazıyorum. Uygulama kullanıcı veritabanına karşı bir arama çalışmasına olanak tanır. Arama çalıştırdığınızda geri düğmesini tıkladığında onun tarafından getirilen bir öğe inceledikten sonra geri dönmek için eğer onlar (o yazıyı kullanır) sorguyu yeniden göndermek isterseniz, onlar sorulur. Veritabanında aramayı yeniden hangi. Get kullanarak postalanacak isteği neden olmaz - ama hala tekrar arayacaksınız olacaktır.

Is there a way to store the search and recall it, with out rerunning it in the database?

Bu php bir şekilde veritabanında kaydederek, ya da olabilir - belki oturumları ile? Bu oturumları için muhtemelen çok fazla gibi bu aramalardan çıkan verilerin bir sürü olabilir, ben hissediyorum.

Ben hayal edebiliyorum başka yolu bir tür geçici bir tabloda, veritabanında depolamak için. Sonra içine doğru seçilmesi, ben sorgulamak niyetinde sütunları ile tablo oluşturma. Daha sonra tablo * seçilmesi. Bu da oldukça kötü bir fikir gibi görünüyor. Etrafında yüzen dinamik olarak oluşturulan geçici tablolar sürü.

Ben bu yapılabilir biliyorum. Kaydedilen aramalar birçok web uygulamaları görmek şeylerdir. Bu yüzden genel olarak nasıl yapılır?

2 Cevap

memcached

veya

APC

However, I notice that you're not giving any reason why you want to cache the results of a search. "Because it's faster, and I read that it makes my app mveyae scalable," is the usual reason fveya this. This smells like premature optimization.

I recommend you build your application and profile it. How costly are these "searches"? Why are they costly? Is it poveya schema design? Is it poveya indexing? Is it poveya choice of stveyaage engine?

MySQL bir query cache olduğunu fark, sağ mı? Birçok durumda bu ihtiyacın olabilir. Mysql istemcisi kullanıyorsanız pahalı "arama" sorgulardan birini çalıştırmayı deneyin ve zaman zaman not, sonra tekrar çalıştırın. Bak?

hata "yeniden göndermek istiyoruz" düzeltmek için, sonra hemen aslında arama yapmak için yeni bir sayfaya yönlendirme, oturumda veya db isteği saklayabilirsiniz:

search.php?searchId=22

if (isset($_GET['searchId'])) {
  $search = $_SESSION['search'][$_GET['searchId'];
  // do search
} elseif (isset($_POST['search'])) {
  $_SESSION['search'][] = $_POST;
  header('Location: search.php?searchId=' . (count($_SESSION['search']) - 1);
}

o zaman [22] ['arama'] veya db $ _SESSION gelen sorgu alanlarını kapmak ...

Sonuçların kaydedilmesi için, sen tarayıcınızın önbelleğini güvenebilirsiniz, ya da gerekirse bir noktada eskileri dışarı dolan ... oturum veya db bireysel SERPs saklayabilirsiniz ...

bir sonuç tablo oluştururken ince (ve karmaşık aramalarda sayfalamayı hızlandırmak olurdu), ama potansiyel orada hit milyonlarca olabilir, böylece önbelleğe alma ile Sayfalandırması daha genel bir yolu olacaktır.

kullanıcı daha sonra arama gün veya hafta dönmek istiyorsa, sadece kaydedilen sorgu alanları ile arama yeniden çalıştırabilirsiniz.