Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [MySQL][PHP]Liczba porządkowa raz jeszcze..., numerowanie wierszy w locie
szymek001
post 12.05.2010, 14:32:38
Post #1





Grupa: Zarejestrowani
Postów: 135
Pomógł: 0
Dołączył: 21.09.2005

Ostrzeżenie: (10%)
X----


Witam, problem pewnie dla wielu wyda się głupi, jednak nie mogę sobie z tym poradzić sad.gif
Otóż mam stronkę z dzwonkami, gdzie segreguje je alfabetycznie według tytułu, więc id nie są liczone kolejno jeden za drugim.
Chciałbym zrobić kolumnę z LP. Drugim problemem jest to, że dzwonki te dziele po 20 sztuk na stronę, więc na kolejnych stronach liczba porządkowa musiała by być większa niż na stronie pierwszej.

Moje zapytanie wygląda następująco:
  1. define('ILOSC_WYNIKOW_NA_STRONIE', 20);
  2. $SQL = "SELECT COUNT(*) FROM mp3 WHERE kategoria=".$_GET['kat']." ORDER BY id ASC ";
  3. $RES = mysql_query($SQL);
  4. list($iloscWpisow) = mysql_fetch_row($RES);
  5.  
  6. $sql = "SELECT * FROM mp3 WHERE kategoria=".$_GET['kat']." ORDER BY tytul ASC LIMIT ".mysql_escape_string((int)$_GET['porcja']*ILOSC_WYNIKOW_NA_STRONIE).",".ILOSC_WYNIKOW_NA_STRONIE;


moja tabela mp3 ma taką strukturę:
Kod
id     kategoria     tytul     dzwonek


Przeszukałem wiele stron w celu znalezienia rozwiązania mojego problemu, jednak nie znalazłem za wiele. Nie wiem, czy do liczby porządkowej mam zrobić kolejną kolumne w bazie danych (bo przecież skoro są alfabetycznie, to kolejność będzie się zmieniała).

Na stronie nospora znalazłem coś takiego:
Cytat
6) Numerowanie wierszy
Wyciągamy rekordy z tabeli w jakiejś tam kolejności, z jakimiś tam warunkami. Chcemy dodatkowo dla każdego rekordu przypisać numer porządkowy dla tego "wyciągania".
1
2
set @i=0;
select @i:=@i+1 nr, jakiesinnepola from tabela;
Kolumna nr zawierać będzie numer porządkowy danego wiersza.

Jednak nie do końca wiem, jak dodać to do mojego zapytania, by działało to dobrze...

Właściwe rozwiązanie znajduje się pewnie na http://algorytmy.pl/?id=1697, ale chyba nie ma już płatności SMS, a 45zł za jedno sortowanie to trochę przesadzona cena..

Z góry dziękuje za wszelką pomoc i odpowiedzi winksmiley.jpg
Go to the top of the page
+Quote Post
tehaha
post 12.05.2010, 14:36:17
Post #2





Grupa: Zarejestrowani
Postów: 1 748
Pomógł: 388
Dołączył: 21.08.2009
Skąd: Gdynia

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


a po co Ci ta liczba porządkowa?
Go to the top of the page
+Quote Post
szymek001
post 12.05.2010, 14:46:58
Post #3





Grupa: Zarejestrowani
Postów: 135
Pomógł: 0
Dołączył: 21.09.2005

Ostrzeżenie: (10%)
X----


by było to posegregowane ;D BTW. jest jakiś sposób na szybką zmianę sortowania z ORDER BY tytul ASC na ORDER BY id DESC przy użyciu formularza? Tak jak np. na forach jest sortowanie według daty/nazwy w formularzu.
Go to the top of the page
+Quote Post
tehaha
post 12.05.2010, 14:58:51
Post #4





Grupa: Zarejestrowani
Postów: 1 748
Pomógł: 388
Dołączył: 21.08.2009
Skąd: Gdynia

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


no tak, ale przecież masz już segregacje alfabetyczną a jak wprowadzisz kolumnę z liczbą porządkową to będzie trzeba ją aktualizować przy każdym dodaniu nowego rekordu.

Jeżeli chcesz zmieniać sortowanie to przekaż dodatkową zmienną np. $sort potem sprawdzasz jaką ma wartość np.
  1. $sort = $_POST['sort'];
  2. if($sort == 'by_date')
  3. {
  4. $order = 'ORDER BY date ASC ';
  5. } else
  6. {
  7. $order = 'ORDER BY tytul ASC ';
  8. }
  9. $sql = "SELECT * FROM tabela $order";
Go to the top of the page
+Quote Post
Pilsener
post 12.05.2010, 14:59:28
Post #5





Grupa: Zarejestrowani
Postów: 1 590
Pomógł: 185
Dołączył: 19.04.2006
Skąd: Gdańsk

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


A po ID nie wystarczy posegregować? Nie ma sensu dodawać liczby porządkowej, jeśli nie potrzebujemy ręcznie zmieniać kolejności poszczególnych pozycji - a taka potrzeba zachodzi na stronach www bardzo rzadko, zazwyczaj używa się jej w menu (choć wyświetlanie alfabetyczne czy wg kolejności dodania także nie jest złe). Nie wyobrażam sobie, żeby ktoś ustawiał położenie każdego dzwonka... I pamiętaj, że komplikuje to usuwanie (trzeba ponumerować od nowa).

A co do sortowania wg formularza to prosto, robisz zwykły select:
  1. <select name="order">
  2. <option value="id">Po ID</option>
  3. <option value="title">Tytuł</option>

, następnie odbierasz z niego wartość,
  1. print_r($_POST);

walidujesz ją i wstawiasz do zapytania jak nazwę tabeli, po której ma sortować:
  1. $zapytek = '... order by '.$tabela.' desc...';
Go to the top of the page
+Quote Post
szymek001
post 12.05.2010, 15:24:38
Post #6





Grupa: Zarejestrowani
Postów: 135
Pomógł: 0
Dołączył: 21.09.2005

Ostrzeżenie: (10%)
X----


dzięki wielkie chłopaki, nie bardzo wiedziałem jak zrobić to ze zmienną przesyłaną POST'em, więc zamieniłem go na GET i wszystko działa, wystarczy że w adresie przekazuje dodatkowe "&sort=by_id", reszta od tehaha działa jak trzeba winksmiley.jpg Teraz tylko muszę rozgryźć przesyłanie metodą POST i będzie ok.


Edit:
Już sobie poradziłem z POST'em, wystarczyło:
  1. <form name="sort" method="post">
  2. <select name="sort">
  3. <option value="by_id">Po ID</option>
  4. <option value="by_tytul">Tytuł</option>
  5. </select>
  6.  
  7. <br><input type="submit" name="submit" value="wy?lij">
  8. </form>


Jednak aby to działało na kolejnych stronach lepiej chyba będzie GET'em smile.gif

Ten post edytował szymek001 12.05.2010, 15:42:03
Go to the top of the page
+Quote Post
exood
post 12.05.2010, 15:29:49
Post #7





Grupa: Zarejestrowani
Postów: 86
Pomógł: 16
Dołączył: 2.12.2009
Skąd: Płock/Warszawa

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


jeżeli ta liczba - w sensie numer porządkowy- jest ci potrzeba tylko i wyłącznie do wyświetlenie na stronie to zakładając, że wyświetlasz "forem" masz:
  1.  
  2. //$page - numer strony na której jesteś
  3. //$ring_tone_array - tablica z dzwonkami, klucze od 0 w górę, po kolei
  4. //$rpp - dzwonkow na strone
  5. for($i=0, $count=count($ring_tone_array); $i<$count; $i++){
  6. echo (($i+1)+($page*$rpp)-$rpp).'. '.$ring_tone_array[$i]["nazwa_dzwonka"].'<br />';
  7. }


Ten post edytował exood 12.05.2010, 15:30:28
Go to the top of the page
+Quote Post

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

 



RSS Wersja Lo-Fi Aktualny czas: 27.04.2025 - 05:24