Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [MySQL][PHP]Liczba porządkowa raz jeszcze...
Forum PHP.pl > Forum > Przedszkole
szymek001
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
tehaha
a po co Ci ta liczba porządkowa?
szymek001
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.
tehaha
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";
Pilsener
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...';
szymek001
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
exood
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. }
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.