ďťż

[php] wyszukiwarka

       

Podstrony


telcocafe

Mam formularz w którym są pola:

-kraj
-miasto
-pora roku
-cena
itp

Ma to być wyszukiwarka ofert z bazy danych. Oczywiście mogą być wypełnione w formularzu wszystkie bądź tylko niektóre pola.

I teraz mam problem jak taką wyszukiwarkę zrobić, pomyślałem, żeby za pomocą if sprawdzać po kolei które pole zostało wypełnione i jeśli jest wypełnione to doklejać odpowiedni fragment warunku WHERE do zapytania i na koniec wywołać tak sklejone zapytanie.

Pytania:

1. Czy taki pomysł jest dobry czy może jest jakiś lepszy ? Szybszy/łatwiejszy ?
2. Znalezione oferty będą stronicowane np po 20 na stronie i jak zrobić żeby przechodząc na kolejne strony wyniki były zapamiętane bez ponownego wypełniania formularza ?



If-ując kolejne pola budujesz łańcuch zapytania, a gdy go masz - wyszukujesz zapytanie. Jeżeli robisz zapytania równości to za pomocą MySQL może iść, a jak chcesz pełnotekstowe (LIKE) to za pomocą sphinxa (lepszy serwer potrzebny), lub pełnotekstowe wyszukiwanie w MySQL dla tabel InnoDB (wydajnosć pomiędzy Sphinxem a LIKE). Jeżeli w tabeli będzie ponad 1000 wierszy to pełnotekstowo LIKE nie poleci dobrze. Przy kilku tysiącach zapytania równości też mogą być niezbyt szybkie.
Użytkownik Riklaunim edytował ten post 15 sierpień 2009, 22:37
Wybacz rik ale gdyby każdy myślał tak jak ty, to w dniu dzisiejszym nikt by nie pisał skryptów.

$count_records_query=mysql_query('SELECT COUNT(x) AS count FROM x'); $count_records=mysql_fetch_assoc($count_records_query); if(intval($_GET[p])<1){ $_GET[p]='1'; } $limit1=$_GET[p]*10-10; $limit2=$_GET[p]*10; $query=mysql_query('SELECT x FROM x WHERE x="x" AND x="x" LIMIT '.$limit1.','.$limit2.'');
Wyświetlanie wyników:

while($q=mysql_fetch_assoc($query)){ echo $q[x].'<br />'; }

I na koniec przyciski

for($i=1;$i<$count_records[count]+1;$i++){ echo '<div style="width:10px; height:10px; border: 1px solid black;">'.$i.'</div>'; }


Wybacz rik ale gdyby każdy myślał tak jak ty, to w dniu dzisiejszym nikt by nie pisał skryptów.
A co ma piernik do wiatraka? Myślisz że na np. porównywarkach cen wyszukiwanie robi baza danych?


$count_records_query=mysql_query('SELECT COUNT(x) AS count FROM x'); $count_records=mysql_fetch_assoc($count_records_query); if(intval($_GET[p])<1){ $_GET[p]='1'; } $limit1=$_GET[p]*10-10; $limit2=$_GET[p]*10; $query=mysql_query('SELECT x FROM x WHERE x="x" AND x="x" LIMIT '.$limit1.','.$limit2.'');
Wyświetlanie wyników:

while($q=mysql_fetch_assoc($query)){ echo $q[x].'<br />'; }

I na koniec przyciski

for($i=1;$i<$count_records[count]+1;$i++){ echo '<div style="width:10px; height:10px; border: 1px solid black;">'.$i.'</div>'; }


Uwzględnij że przy dużej ilości rekordów SELECT COUNT będzie wykonywane bardzo długo (od kilku tysięcy rekordów starczy). Trzeba denormalizować liczniki jeżeli są potrzebne. Też WojtekP wie jak wykonywać zapytania i pobierać wyniki, a pyta się o dokładanie warunków przed wykonaniem zapytania.

  • zanotowane.pl
  • doc.pisz.pl
  • pdf.pisz.pl
  • nvm.keep.pl

  • Sitedesign by AltusUmbrae.