ďťż
Podstrony
|
telcocafeMam 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. |
|||
Sitedesign by AltusUmbrae. |