[PHP+MySQL] wyszukiwarka i problem z kategoriami |
[PHP+MySQL] wyszukiwarka i problem z kategoriami |
27.05.2004, 13:02:14
Post
#1
|
|
Grupa: Zarejestrowani Postów: 67 Pomógł: 0 Dołączył: 5.04.2003 Ostrzeżenie: (0%) |
Witam.
Zrobilem skrypcik, ktory korzysta z 2 tabel w bazie: Kod ----kategorie
-idk -nazwa -----Oferta -id -kat (powizananie z nazwa kategorii - tabeli KATEGORIE) - itd.......... No i w forumlarzu wyszukiwania mam 2 pola: - 1 select - tu pobrane sa wszytkie kategorie - 1 input - tu wpisujemy szukane slowo, ktore jest szukane w 2 polach bazy: miasto, kraj. No i problem polega na tym: -ze nie wiem jak wyswietlic wyniki wyszukiwania w taki sposob - ze jak nie wybiore z SELECTA zadnej kategorii to: - powinno mi wysietlic NAZWY KATEGORII (do ktroej naleza znalezione produkty - a pod tymi nazwami kategorii powinno wysietlic produkty do nich nalezace ->>>oczywiscie kazda nazwa KATEGORII powinna byc wysietlona tylko 1 raz - i powinno wysietlic tylko nazwy kategorii ktore odpowiadaja zanlezionym produktom: O to moj kod: [php:1:13251f4aec] <? $kryteria = Array(); if( !empty( $_POST['kat'] ) ) $kryteria[] = "kat = '" . $_POST['kat'] . "'"; if( !empty( $_POST['slowo'] ) ) $kryteria[] = "miasto LIKE '%" . $_POST['slowo'] . "%' AND kraj LIKE '%" . $_POST['slowo'] . "%'"; $warunki = ( count( $kryteria ) > 0 ) ? " WHERE " . implode( ' AND ', $kryteria ) : ''; ////////////////////////////////////////////// $sql1 = mysql_query("SELECT * FROM ".OFERTA." " . $warunki . " ") or die ('Wyst±pił bł±d: '.mysql_error() ); $ile = mysql_num_rows($sql1); ?> <table width=600><tr><td width=150><b>Znalezionych ofert:</b> <?echo $ile;?></td><td></td></tr></table><br> <? while($row1=mysql_fetch_array($sql1)) { $i++; if($i % 2 == 0) { $bgColor = '#E9EAFB'; } else { $bgColor = '#EEEFF7'; } print'<tr bgcolor='.$bgColor.'> <TD width="23"><center>'.$i.'.</TD> <TD width="100">'.$row1['kraj'].'</TD> <TD width="140">'.$row1['miasto'].'</TD> <TD width="101"><center><a href=?op=wiecej&id='.$row1['id'].'>więcej>></a></TD> </TR>'; } ?> [/php:1:13251f4aec] |
|
|
27.05.2004, 18:52:46
Post
#2
|
|
Grupa: Zarejestrowani Postów: 136 Pomógł: 0 Dołączył: 2.01.2004 Skąd: Lublin Ostrzeżenie: (0%) |
Nie analizowałem tego kodu, który podałeś, ale opiszę ci jak ja bym to zrobił.
Z tego co napisałeś to możliwe są dwa zapytania 1: - gdy user nie wybierze kategorii [sql:1:bb86ddd57e] SELECT * FROM kategorie as a, oferta as b WHERE a.idk=b.kat AND ( b.miasto LIKE '%COSTAM%' OR b.kraj LIKE '%COSTAM%') [/sql:1:bb86ddd57e] 2: - gdy user wybierze kategorie [sql:1:bb86ddd57e] SELECT * FROM kategorie as a, oferta as b WHERE a.idk=b.kat AND ( b.miasto LIKE '%COSTAM%' OR b.kraj LIKE '%COSTAM%') AND a.idk=ID_WYBRANEJ_KATEGORII [/sql:1:bb86ddd57e] Jeśli było to zapytanie nr 2 to chyba wiadomo co dalej A jeśli zapytanie nr 1 to... Np. możesz teraz przejść przez każdy wiersz w ten sposób: [php:1:bb86ddd57e] <?php while( $arrWiersz = mysql_fetch_assoc( $resRezultat ) ) { $intKatId = $arrWiersz{'idk'}; $arrFinal{$intKatId}[] = $arrWiersz; $arrNazwyK{$intKatId} = $arrWiersz{'nazwa'}; } ?> [/php:1:bb86ddd57e] I teraz masz w $arrFinal tablicę gdzie kluczem jest id kategorii a wartością kolejna tablica, gdzie każdy jej element jest tablicą zawierającą dane jednego wiersza z bazy danych. Czyli.. [php:1:bb86ddd57e] <?php foreach( $arrFinal as $intKatId => $arrPozycje ) { echo 'Kategoria: '.$arrNazwyK{$intKatId}.' i jej pozycje:<br>'; foreach( $arrPozycje as $arrPozycja ) { // tutaj wyswietlasz to co tam chcesz z tabeli oferta } } ?> [/php:1:bb86ddd57e] No ja bym to tak zrobił Optymalniej byłoby to zrobić w jednym "przejściu", czyli generować kod HTML dla każdej kategorii juz w tej pierwszej pętli, która operuje na wynikach z bazy danych. Dla każdej kategorii mógłbyś zapamiętywać np wiersz tabeli HTML'owej z odpowiednia zawartością i wklejać to do jakiejś zmiennej, oddzielnej dla każdej napotkanej w pętli kategorii. No a po wyjściu z pętli, wysłać na ekran początek tabeli, wiersz nagłówkowy i każdą z kategorii w odpowiedniej kolejności a na koniec zmkanąć tabelę i już -------------------- |
|
|
28.05.2004, 07:56:44
Post
#3
|
|
Grupa: Zarejestrowani Postów: 67 Pomógł: 0 Dołączył: 5.04.2003 Ostrzeżenie: (0%) |
Wielkie dzieki - dokladnie o to mi chodzilo.
Jesli jestesmy w temacie wyszukiwarki i kategorii - mialbym jeszcze jedno pytanko: Jak zrobic na podstawie tego przykladu - aby wyszukiwarka (w przypadku nie wybrania kategorii) zwrocila wynik w takiej postaci: - nie wyswietla ofert - tylko wyswietla nazwy kategorii (oczywiscie do ktorych naleza wyszukane oferty) - a obok nazwa kategorii - liczba znalezonych ofert dla danej kategorii. Z gory bardzo dziekuje za pomoc |
|
|
28.05.2004, 09:28:15
Post
#4
|
|
Grupa: Zarejestrowani Postów: 136 Pomógł: 0 Dołączył: 2.01.2004 Skąd: Lublin Ostrzeżenie: (0%) |
Musisz użyć takiego zapytania:
[sql:1:640ff204bb] SELECT COUNT(*) as ile_pozycji, a.nazwa FROM kategorie AS a, oferta AS b WHERE a.idk=b.kat AND ( b.miasto LIKE '%COSTAM%' OR b.kraj LIKE '%COSTAM%') GROUP BY a.idk [/sql:1:640ff204bb] Pole ile_pozycji będzie zawierać ilość materiałów w każdej z kategori z uwzględnieniem wpisanej w formularzu frazy. Poczytaj troche o funkcjach agregujących i klauzuli GROUP BY -------------------- |
|
|
Wersja Lo-Fi | Aktualny czas: 24.04.2024 - 12:51 |