Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: sortowanie - opcja malejąco lub rosnąco
Forum PHP.pl > Forum > Gotowe rozwiązania
ewela_n
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
W formularzu robisz dwa pola radio:
  1. <input type="radio" name="order" value='DESC' />Malejąco
  2. <input type="radio" name="order" value='ASC' />rosnąco


A potem w php w zapytaniu dodajesz sortowanie na podstawie zaznaczonego radio:
  1. <?php
  2.  
  3. $zapytanie=&#092;".......tu twoje zapytanie\";
  4. if (isset($_POST['order']))
  5.  $zapytanie.=' order by cena '.$_POST['order'];//tu sortowanie
  6.  
  7. ?>
ewela_n
Dzieki bardzo, podobnie kombinowałam
ale jak zadeklarować tą cenę ?
bo ta cena nie występuje w bazie danych
nospor
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
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
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
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
no a dalas tam gdziesz group by? Mozesz pokazac to zapytanie?
ewela_n
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
no to daj groub by i potem pogadamy rolleyes.gif
ewela_n
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
Mistrzu rolleyes.gif , 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
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
hihi, cierpliwości mam tylko do 16. potem idę domciu rolleyes.gif

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 sadsmiley02.gif)
4) jesli mozesz podaj struktury tabel wraz z relacjami
5) podaj numer telefonu i przeslij zdjęcie .... tongue.gif hihi, to żart, ale korcilo mnie aby to napisać (mam nadzieję że źle tego nie odbierzesz)
ewela_n
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
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.
Invision Power Board © 2001-2024 Invision Power Services, Inc.