ewela_n
30.03.2005, 08:59:58
Witam!
Przeczytałam wszystkie posty i nie znalazłam nic podobnego.
Otóż mam wyszukiwarkę, która wyszukuje wszystkie elementy z różnych tablic. W wynikach wyszukiwania pojawiają mi się domy z opisem i ceną, która to cena jest wyliczona cena min do cena max
Cena min - to cena najmniejsza z ceny podstaowej a cena max to największa z ceny podstawowej
i teraz mam problem jak sortować to w porządku cenowym - od najmniejszej do największej i wybierać możliwość sortowania.
albo rosnąco albo malejąco - np. wciskając przycisk typu radio.
prosze o pomoc
nospor
30.03.2005, 09:28:40
W formularzu robisz dwa pola radio:
<input type="radio" name="order" value='DESC' />Malejąco
<input type="radio" name="order" value='ASC' />rosnąco
A potem w php w zapytaniu dodajesz sortowanie na podstawie zaznaczonego radio:
<?php
$zapytanie=\".......tu twoje zapytanie\";
if (isset($_POST['order'])) $zapytanie.=' order by cena '.$_POST['order'];//tu sortowanie
?>
ewela_n
30.03.2005, 09:43:33
Dzieki bardzo, podobnie kombinowałam
ale jak zadeklarować tą cenę ?
bo ta cena nie występuje w bazie danych
nospor
30.03.2005, 09:45:28
Sama napisalas, że masz dane z różnych tablic a w wyniku wyszukiwania pojawiają ci się domy z opisem, ceną. Skąd ta cena? Z tabeli? jak tak to po sprawie
ewela_n
30.03.2005, 09:50:51
Sorry za chaotyczność, pierwszy raz korzystam z forum.
Cena wyświetlona pod domem wyświetla mi taką kombinację
Cena minimalna - do cena maxymalna
gdzie cena min to min(cennik)
a cena max to max (cennik)
np. Domek typ BR 124
cena 1000 zł - 2000 zł
sama sobie ułożyłam tą zmienną tak
$cenaMax=mysql_fetch_array(sql("select max(cennik) from cennik where .......
nospor
30.03.2005, 09:58:28
To zrob alias. Założmy że chceszz sortować po maxymalnej cenie.:
select max(cennik) as maxcena .....ireszta.
Następnie sortuj po tym aliasie:
.... order by maxcena ...
ewela_n
30.03.2005, 10:11:03
zrobiłam tak, ale wyszły mi jakieś błędy jak dopisuje to min
[Mixing of GROUP columns (MIN(),MAX(),COUNT()...) with no GROUP columns is illegal if there is no GROUP BY clause]
nospor
30.03.2005, 10:12:58
no a dalas tam gdziesz group by? Mozesz pokazac to zapytanie?
ewela_n
30.03.2005, 10:17:25
pewnie, że nie dałam
a zapytanie jest takie
$zapytanie="select distinct domy.*,regiony.nazwa as region,max(cennik.cennik) as maxCena, from domy,cennik,regiony where ";
nospor
30.03.2005, 10:19:03
no to daj groub by i potem pogadamy
ewela_n
30.03.2005, 11:51:32
Mistrzu, dałam w zapytaniu max(cennik) as maxCena itd
a później
$zapytanie.=") group by domy.id order by maxCena ".$_POST["order"];//tu sortowanie
i niestety nie sortuje po kolei
dwa domy są dobrze, później źle
nospor
30.03.2005, 11:57:24
Mistrzu
, hihi ładnie.
A w jaki sposób określasz max i min dla domu? na podstawie id? Domyslma się, że masz parę domków w bazie, które są identyczne i dla nich okreslasz min i max.
W przykładzie wczesniej dalas cos takiego:
Cytat
np. Domek typ BR 124
cena 1000 zł - 2000 zł
Czyli wyliczylas min i max dla domku typu BR 124. Ten typ to jakie pole w bazie? ID? A może pole typ?
Bo grupowac musisz wlasnie po tym typie (czyli po tym co się powtarza dla domków).
czyli wydaje mi się ze powinnaś dac group by typ a nie group by id. Zazwyczaj id jest unikalne dla kazdego rekordu. mam rację? Nie wiem jak jest u Ciebie. Jeśli się mylę, to przydałoby się trochę więcej informacji na temat tych twoich tabel i danych w nich
ewela_n
30.03.2005, 12:19:25
Nie wiem jak mam Ci dziękować, że masz tyle cierpliwości...
Tabela domy zawiera pola - id, nazwa, opis itd.
Typ jakiś tam jest nazwą
ale jest to samo jak robię group by domy.nazwa
nospor
30.03.2005, 12:26:22
hihi, cierpliwości mam tylko do 16. potem idę domciu
1) Ale czegoś tu nie rozumiem. PO czym grupowalaś na samym początku, że dostawalaś min i max domu?
2) distinct w selectie jest raczej nie potrzebny (chyba ze masz zle warunki nalozone)
3) podaj cale zapytanie (ze wszystkim:select,where,order,group by) nie obcinaj go.
(chyba że to tajne
)
4) jesli mozesz podaj struktury tabel wraz z relacjami
5) podaj numer telefonu i przeslij zdjęcie ....
hihi, to żart, ale korcilo mnie aby to napisać (mam nadzieję że źle tego nie odbierzesz)
ewela_n
30.03.2005, 12:38:52
dobrze się składa, ja też pracuję do 16.00
a tak na powaznie:
wcześniej robiłam order by domy.nazwa
i pokazywało się:
1. Nazwa domu
2. Opis tego domu
3. Przedział cenowy
a przedział cenowy robiłam tak:
$cenaMin=mysql_fetch_array(sql("select min(cennik) from cennik where id_domu=".$dom["id"]." and cennik>1;"));
$cenaMax=mysql_fetch_array(sql("select max(cennik) from cennik where id_domu=".$dom["id"]." and do7dni>1;"));
if($cenaMin["min(cennik)"]>0)
echo ($cenaMin["min(cennik)"]!=$cenaMax["max(cennik)"]) ? "od ".$cenaMin["min(cennik)"]." do ".$cenaMax["max(cennik)"]." <br>" : $cenaMin["min(cennik)"]." <br>";
elseif($cenaMax["max(cennik)"]>0)
echo $cenaMax["max(cennik)"]." <br>";
własnie tu jest problem - że nie układa mi po tych cenach, tylko jakoś różnie
nospor
30.03.2005, 12:49:38
To żeby było wszystko jasne (opiszę, jak mi się wydaje że robisz):
Najpierw pobierasz id domów.
potem w pętli lecisz i dla każdego id wyliczasz min i max z tabeli cennik.
jeśli tak robisz to tu faktycznie nie ma sortowania.
Powiedz min najpierw czy dobrze napisalem. (a może masz gg? bedzie szybciej)
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę
kliknij tutaj.