Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: ORDER, LIMIT, (re)ORDER
Forum PHP.pl > Forum > Bazy danych
abort
Krótko: robię zapytanie do bazy, zwykły:
Kod
SELECT * WHERE warunek ORDER_BY ilosc asc LIMIT N

Efekt zgodny z przewidywaniami: zwraca mi uporządkowaną tablicę - na początku najmniejsze wartości z kolumny "ilosc", na końcu największe. Jak teraz przekonać bazę, by te N "najmniejszych" rekordów posortowała mi malejąco?

Czyli, mamy (dla uproszczenia) 100 liczb (od 1 do 100) w bazie, zapytanie z "ORDER_BY liczba asc LIMIT 5" zwróci mi dokładnie 5 liczb, ale w kolejności: 1,2,3,4,5. Ja chciałbym, aby mi zwróciło to samo, ale w porządku odwrotnym, czyi 5,4,3,2,1.

Używam CI, i do tego celu zamodelowałem sobie:
  1. function get_topsites($number, $order) {
  2. $this->db->where (...( tu warunek)...);
  3. $this->db->order_by ("visits", $order); // $order przyjmuje wartości "asc" albo "desc" - w tym momencie jest "asc"
  4. $this->db->limit($number);
  5. $query = $this->db->get ($this->_table);
  6. return ($query->result_array());
  7. }

Próbowałem zrobić:
  1. $this->db->order_by ("visits", $order); // $order przyjmuje wartości "asc" albo "desc"
  2. $this->db->limit($number);
  3. $query = $this->db->get ($this->_table);
  4. $this->db->order_by ("visits", "desc");

ale to nie działa tak jak się spodziewałem (i, po głębszym przemyśleniu, chyba nie powinno).

Trochę szukałem po forum i po google, ale jakoś nie umiałem znaleźć tego, co mnie interesuje...
nospor
  1. SELECT * FROM (SELECT * WHERE warunek ORDER_BY ilosc ASC LIMIT N) podsel ORDER BY ilosc DESC
d3ut3r
W czystym MySQL przychodzi mi na myśl tylko jedno rozwiązanie podzapytania np:

  1. SELECT * FROM ( SELECT * FROM liczby ORDER BY liczba ASC LIMIT 10 ) AS wynik ORDER BY liczba DESC
abort
Dzięki, działa (na razie w panelu phpMyAdmina).
Pozostaje skonstruować funkcję w modelu CI, co nie jest trywialne (ale podobno wykonalne). Nawet już znalazłem wskazówki, jak się do tego zabrać.
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.