Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [MySQL][PHP]Sortowanie po wyborze z pola select / zmienna w zapytaniu SQL?
Forum PHP.pl > Forum > Przedszkole
kubax33
Zastanawiam się jak wykonać poprawnie sortowanie wyników po wybraniu z selecta

  1. <select name="sortuj">
  2. <option value="1" name="sortuj">Rosnąco</option>
  3. <option value="2" name="sortuj">Malejąco</option>


Robię to teraz jak potrafię, ale wiem, że jest to niezbyt dobre rozwiązanie:

  1. if ($_POST['sortuj'] == '1')
  2. {
  3. $sql = mysql_query("SELECT * FROM tabela GROUP BY produkt ASC");
  4. }
  5. elseif ($_POST['sortuj'] == '2')
  6. {
  7. $sql = mysql_query("SELECT * FROM tabela GROUP BY produkt DESC");
  8. }


Czy przesyłać jakoś to w zmiennej i odczytywać zmienną w sql?
Jakie jest poprawne rozwiązanie?
nospor
Przekombinowales


  1. $sort = $_POST['sortuj'] === '1' ? 'ASC' : 'DESC'
  2. $sql = mysql_query("SELECT * FROM tabela GROUP BY produkt $sort");

kubax33
Tylko, że mam zapytanie na prawdę tak wyglądające:

  1. $dbh = new PDO("mysql:host=$host;dbname=$base_name", $user, $pass);
  2. $sort = $_POST['sortuj'] === '1' ? 'ASC' : 'DESC'; /// dodałem średnik na końcu
  3. foreach($dbh->query('SELECT produkt ,GROUP_CONCAT(DISTINCT id ORDER BY id ASC SEPARATOR ", ") FROM tabela GROUP BY ean $sort') as $info)
  4.  
  5. {
  6. echo 'dane... '.$info['id'].'';
  7. }


i jak widzę to rozwiązanie nie funkcjonuje wywalając błąd:
  1. Warning: Invalid argument supplied for foreach()
trueblue
....GROUP BY ean ORDER BY pole $sort'
kubax33
Dałem

  1. foreach($dbh->query('SELECT produkt ,GROUP_CONCAT(DISTINCT id ORDER BY id ASC SEPARATOR ", ") FROM tabela GROUP BY ean ORDER BY ean $sort') as $info)


i dałej błąd
nospor
Haha, nawet nie zwrocilem uwagi ze dales tam GROUP BY zamiast ORDER BY... no podstawy kolego wink.gif

edit: skoro masz blad, to wyswietl blad bazy to ci on wszystko powie co masz zle
trueblue
ORDER BY ean '.$sort
nospor
ps: i odrozniaj ' od ". W moim przykladzie ja uzylem " i tam mozna wlozyc zmienna. W ' zmienna nie jest interpretowana :/
kubax33
Ok dzięki za nakierowanie faktycznie chodziło ' / "

  1.  
  2. $dbh = new PDO("mysql:host=$host;dbname=$base_name", $user, $pass);
  3. $sort = $_POST['sortuj'] === '1' ? 'ASC' : 'DESC'; /// dodałem średnik na końcu
  4. foreach($dbh->query("SELECT produkt ,GROUP_CONCAT(DISTINCT id ORDER BY id ASC SEPARATOR ', ') FROM tabela GROUP BY ean $sort") as $info)
  5.  
  6. {
  7. echo 'dane... '.$info['id'].'';
  8. }
  9.  


Ale teraz mam problem z
  1. GROUP_CONCAT(DISTINCT id ORDER BY id ASC SEPARATOR ", ")


,który zmieniłem na
  1. GROUP_CONCAT(DISTINCT id ORDER BY id ASC SEPARATOR ', ')


i nie pobiera danych

ok
  1. GROUP_CONCAT(DISTINCT id ORDER BY id ASC SEPARATOR \", \")


działa
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-2025 Invision Power Services, Inc.