Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: SQL Sortowanie według własnej kolejności
Forum PHP.pl > Forum > Bazy danych
rollon
Mam w bazie tabale z artykułami:

id | kategoria | tytul | tresc

jakiego zapytania użyć, żeby wyświetlić dane według własnej kolejności, którą będą tytuły artykułów.

Czyli np:

id | kategoria | tytul | tresc |
____________________________________
1. | menu | Pizze | jakas tresc |
2. | menu | Obiady | inna tresc |
3. | menu | Dodatki | tersc numer 2 |

itp

Właściciel zażyczył sobie kolejność artykułów według której nie można znaleźć żadnego logicznego wyjścia dlatego chciałbym pobrać dane według wypisanych tytułów tych artykułów.
dantes
nie wiem czy do końca rozumiem, ale chodzi Ci o to, że niezależnie jakie id będą miały wpisy w bazie, to klient ma swoją "wizję" kolejności, która nie jest również zbieżna z np. tytułem w kol. alfabetycznej?

Jeśli tak to widzę 2 opcje. Jeśli kolejność nie będzie modyfikowana, to po prostu wprowadź do bazy w kolejności takiej, jak mają być. Czyli
  1. SELECT * FROM `tabela` ORDER BY id ASC

Jeśli zaś ma być możliwość ustalenia kolejności etc., to proponuję dodanie kolumny "kolejnosc" - INTEGER i zrobienie tak:
  1. SELECT * FROM `tabela` ORDER BY kolejnosc ASC

I wtedy dla pierwszej pozycji wprowadzasz kolejnosc=1, dla drugiej 2 itd.
Możesz dorobić też potem np. w panelu admina możliwość zmiany (swap) kolejności (przenieś o 1 w górę, o 1 w dół). Ja takie coś musiałem zrobić w jednym z projektów do zarządzania kolejnością elementów w menu.
rollon
Tak chodzi o to ze nie można ani alfabetycznie, ani po ID.

Wyczytałem, że można użyć:

  1. order by field(id,1,3,4,2)


ale wywala mi błąd
Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource

Ktoś ma jakiś pomysł?

PS. Wy-edytować bazy wolałbym uniknąć, żeby nie popsuć zależności między tabelami.
thek
Bo użyć można. Problem w tym czy sobie sprawdziłeś co dostajesz w wyniku. Może to tutaj jest błąd bo masz jakąś starszą wersję bazy, która tej składni nie rozpoznaje i rzuca błędem, którego zwyczajnie nie widzisz bo nie sprawdzasz czy result jest false, tylko pchasz od razu wyjście z danymi do mysql_fetch_array.

EDIT: zawsze też możesz stworzyć dodatkową tabelę przechowująca kolejność wierszy dla każdego z userów. Wszystkie miały by określoną wartość domyślną i dopiero istotne miały by nadawaną wartość od 1 wzwyż. Potem ORDER BY ta kolumna. A to jak rozwiązać kolejność jest już kwestią umiejętności. Można nawet to dać samemu klientowi do wyboru jako ileś tam z góry (10?). Używasz drag & drop czy innej techniki i odpowiednio modyfikujesz wartości tej kolumny pod kątem tego co robi user z rekordami możesz to potem nawet zapisać jako zwykły string, który potem podasz w podzapytaniu.
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.