Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: kolejność w tabeli
Forum PHP.pl > Forum > Przedszkole
roobik
Witam!
Nie wiem czy będę umiał to wytłumaczyć, ale się postaram:
Obecnie w atbeli ułożone są rekordy, które są wyświetlane w kolejności ich dodania. No i teraz tak:
Cytat
$query = 'INSERT INTO progsy(nazwa, prod, licz) VALUES ("'.$_POST['nazwa'].'" , "'.$_POST['prod'].'", 0)';

Tak jest teraz. Jeśli jednak zmienię (a raczej dodam) wpis na taki:
Cytat
$query = 'INSERT INTO progsy(nazwa, prod, licz) VALUES ("'.$_POST['nazwa'].'" , "'.$_POST['prod'].'", 0) ORDER BY licz DESC';

to niby jest OK, bo chcę mieć wartości w kolejności malejącej. Ale po lewej stronie tabeli mam kolumnę, gdzie znajduje się $id każdego rekordu. Więc wraz z sortowaniem w kolejności malejącej nie jest "poukładane" wg kolejności rosnącej tzw liczba pojedyncza (Lp.)
Troche zamotalem smile.gif ale chyba wiadomo o co chodzi...
mike
Zgodnie z teorią naz danych ( i praktyką zresztą też ) fizyczna kolejnośc rekordów, a nawet pól nie ma żadnego znaczenia.
W ogóle nie jest istotne jak serwer bazy sobie to poukłada.
Istotne jest to jak to potem wyjmiesz.
Nie skupiaj sie na odpowiednim włożeniu do bazy bo to nie ma znaczenia. jeżeli potem będziesz chciał sortować, to posortujesz w zapytaniu SELECT i to jak chceszs - rosnąco, malejąco, wg. jednego pola, wg. dwóch ...

INSERT nie ma znaczenia,
SELECT owszem.
roobik
Cytat("mike_mech")
Istotne jest to jak to potem wyjmiesz.

Zgoda. Tylko jak to wyjąć? W tabeli mam 4 kolumny: id (auto), nazwa, prod, licz
Więc moim skromnym zdaniem nie ma z czego wyjąć tego o czym mowa - sortowanie jest już wg $id (kolejność dodania), ale jak chcę w kolejności malejącej to rozsypuje się kolejność $id.
Nie musi byćwyświetlane id kazdego rekordu - ważne jest, by przy każdym sortowaniu względem licz była taka sama kolejność Lp.
GG 1541788
Arkadyjczyk
A to id używasz do czegoś, czy tylko ma ładnie wyglądać jako lp? Bo w tabeli, jeżeli jest dodawane automatycznie to tylko podczas sortowania po id będzie w kolejności (no i w takich przedziwnych wypadkach jak dane były dodawane celowo tak, żeby juz były w kolejnosci wg jakiegoś pola). Jeżeli ma tylko ładnie wyglądać to dodaj sobie liczbę porządkową niezależnie od id i tyle.
yenk
roobik - nie wiem czy dobrze Cię rozumiem, ale

Możesz wyjmować z bazy różnie sortując
SELECT * FROM progsy ORDER BY id DESC //malejąco
SELECT * FROM progsy ORDER BY id ASC //rosnąco

zmienia sie tylko DESC i ASC.

Poczytaj więcej: http://www.home.pl/support/434
roobik
Cytat("Arkadyjczyk")
A to id używasz do czegoś, czy tylko ma ładnie wyglądać jako lp?

Na razie id nie jest używane jako takie. W przyszłości będzie mi potrzebne, by sprzęgnąć ze sobą dwie (albo trzy) tabele.
Cytat("Arkadyjczyk")
Jeżeli ma tylko ładnie wyglądać to dodaj sobie liczbę porządkową niezależnie od id i tyle.

No i w tym właśnie problem. Oto kawałek kodu:
  1. <?php
  2.  
  3. {
  4. echo '<center>';
  5.     echo '<table border=\"1\" width=\"500\">'
  6.         .'<td width=\"20\">'.$id['id'].'</td>'
  7.         .'<td width=\"200\">'.$id['nazwa'].'</td>'
  8.         .'<td width=\"200\">'.$id['prod'].'</td>'
  9.         .'<td width=\"40\">'.$id['licz'].'</td>'
  10.         .'<td width=\"40\"><a href=\"?op=getit&id='.$id['id'].'\"><img src=\"Vbutton.gif\" border=\"0\"/></a></td>'
  11.         .'</table>';
  12. echo '</center>';
  13. }
  14.  
  15. ?>


i zamiast właśnie tej linii:
Cytat
.'<td width="20">'.$id['id'].'</td>'

chcę zrobić Lp.
Pomożecie? winksmiley.jpg

UPDATE
yenk wiem już tak robiłem, ale źle mnie zrozumiałeś. OK, założmy mam taką tabelę:
$id nazwa prod licz
--------------------------------------
1 progr1 prod1 22
2 progr2 prod2 31
3 progr3 prod 3 16
.
.
.
w momencie, gdy robię SELECT * FROM progsy ORDER BY id DESC to otrzymuję właśnie to powyżej.
Ale zamiarem moim jest:
Lp. nazwa prod licz
--------------------------------------
1 progr2 prod2 31
2 progr1 prod1 22
3 progr3 prod 3 16

Nie musi się nawet wyswietlac $id. Codzi , żeby licz było DESC i dodatkowo wprowadzona została numeracja Lp.. Bez tej numeracji stosując sortowanie licz DESC oraz wyświetlając $id otrzymuję:

$id nazwa prod licz
--------------------------------------
2 progr2 prod2 31
1 progr1 prod1 22
3 progr3 prod 3 16

Już bardziej dokładnie nie potrafię wyjaśnić... sad.gif
yenk
No to muszę być inny, aby nie rozumieć. Zrób tak jak mówił Arkadyjczyk i zmień kod. Załóżmy, że dodajesz sobie kolumne o nazwie LP, w której zapisujesz zawsze nr większy od poprzedniego i po kłopocie. A później robisz tak:

.'<td width="20">'.$lp['lp'].'</td>'


Zresztą, widzę, że masz problemy więc pokażę Ci jak masz zapisywać nr o 1 większy. Mam nadzieję, że już sobie poradzisz.

  1. <?
  2. mysql_connect(&#092;"\", \"\", \"\");
  3. mysql_select_db (&#092;"\"); //łączymy się z bazą, wybieramy ją, to chyba logiczne
  4.  
  5. $sql = &#092;"SELECT lp FROM nazwa_tabeli ORDER BY lp DESC LIMIT 1\"; //pobieramy ostatni najwyższy numerek
  6. $query = mysql_query( &#092;"$sql\"); //właściwie to teraz pobieramy przez zapytanie
  7. $tablica = mysql_fetch_assoc( $query ); //tworzymy tablicę z zapytania
  8. $liczba = $tablica['lp']; //dła ułatwienia robimy sobie prostszą zmienną
  9. $uzyskana_liczba = $liczba + 1; //do naszej najwyższej liczby dodajemy 1
  10. $ustawienie = &#092;"INSERT INTO toplista (lp) VALUES ('\".$uzyskana_liczba.\"' )\"; //ustawiamy zmienną do zapisania naszej uzyskanej liczby
  11. $query = mysql_query( &#092;"$ustawienie\"); //a tutaj wykonujemy to zapisywanie
  12. ?>


Powodzenia!
roobik
... i tu jest właśnie problem - w przypadku głosowania na któryś program również dodaje się jeden wiersz (rekord)... ale pusty! Robiłem podobnie jak mi napisałeś tyle , że marnym rezuiltatem.
Teraz mam kilka przykładowych rekordów - przy nich, nie dość, że nie ma kolejności Lp to jeszcze bez sensu dodają się rekordy przy głosowaniu.

Jak widaćto nie taka prosta sprawa .... inaczej nie pisałbym na Forum...
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.