Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> SQL Sortowanie według własnej kolejności
rollon
post 17.12.2009, 21:01:01
Post #1





Grupa: Zarejestrowani
Postów: 24
Pomógł: 0
Dołączył: 14.03.2007

Ostrzeżenie: (0%)
-----


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.
Go to the top of the page
+Quote Post
dantes
post 17.12.2009, 21:11:55
Post #2





Grupa: Zarejestrowani
Postów: 29
Pomógł: 5
Dołączył: 22.09.2009

Ostrzeżenie: (0%)
-----


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.
Go to the top of the page
+Quote Post
rollon
post 17.12.2009, 23:18:08
Post #3





Grupa: Zarejestrowani
Postów: 24
Pomógł: 0
Dołączył: 14.03.2007

Ostrzeżenie: (0%)
-----


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.
Go to the top of the page
+Quote Post
thek
post 18.12.2009, 10:10:09
Post #4





Grupa: Moderatorzy
Postów: 4 362
Pomógł: 714
Dołączył: 12.02.2009
Skąd: Jak się położę tak leżę :D




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.

Ten post edytował thek 18.12.2009, 10:18:21


--------------------
Najpierw był manual... Jeśli tam nie zawarto słów mądrości to zapytaj wszechwiedzącego Google zadając mu własciwe pytania. A jeśli i on milczy to Twój problem nie istnieje :D
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Wersja Lo-Fi Aktualny czas: 2.05.2025 - 05:06