Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [PHP+MySQL] wyszukiwarka i problem z kategoriami
lucek
post 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&plusmn;pił bł&plusmn;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]
Go to the top of the page
+Quote Post
lukaswoj
post 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 smile.gif

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ł smile.gif


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ż smile.gif


--------------------
Pozdrawiam
Łukasz Wojciechowski
New Generation Software
+48 602 214 629
http://www.ngsoft.pl
Go to the top of the page
+Quote Post
lucek
post 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
Go to the top of the page
+Quote Post
lukaswoj
post 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


--------------------
Pozdrawiam
Łukasz Wojciechowski
New Generation Software
+48 602 214 629
http://www.ngsoft.pl
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Wersja Lo-Fi Aktualny czas: 24.04.2024 - 12:51