Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> kolejność w tabeli
roobik
post
Post #1





Grupa: Zarejestrowani
Postów: 410
Pomógł: 5
Dołączył: 25.01.2005
Skąd: Wrocław

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


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 (IMG:http://forum.php.pl/style_emoticons/default/smile.gif) ale chyba wiadomo o co chodzi...
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 7)
mike
post
Post #2





Grupa: Przyjaciele php.pl
Postów: 7 494
Pomógł: 302
Dołączył: 31.03.2004

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


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.

Ten post edytował mike_mech 26.01.2005, 22:10:37
Go to the top of the page
+Quote Post
roobik
post
Post #3





Grupa: Zarejestrowani
Postów: 410
Pomógł: 5
Dołączył: 25.01.2005
Skąd: Wrocław

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


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
Go to the top of the page
+Quote Post
Arkadyjczyk
post
Post #4





Grupa: Zarejestrowani
Postów: 7
Pomógł: 0
Dołączył: 6.09.2003

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


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.
Go to the top of the page
+Quote Post
yenk
post
Post #5





Grupa: Zarejestrowani
Postów: 5
Pomógł: 0
Dołączył: 24.02.2004
Skąd: Zabrze

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


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
Go to the top of the page
+Quote Post
roobik
post
Post #6





Grupa: Zarejestrowani
Postów: 410
Pomógł: 5
Dołączył: 25.01.2005
Skąd: Wrocław

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


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? (IMG:http://forum.php.pl/style_emoticons/default/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ć... (IMG:http://forum.php.pl/style_emoticons/default/sad.gif)

Ten post edytował roobik 27.01.2005, 14:02:56
Go to the top of the page
+Quote Post
yenk
post
Post #7





Grupa: Zarejestrowani
Postów: 5
Pomógł: 0
Dołączył: 24.02.2004
Skąd: Zabrze

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


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!
Go to the top of the page
+Quote Post
roobik
post
Post #8





Grupa: Zarejestrowani
Postów: 410
Pomógł: 5
Dołączył: 25.01.2005
Skąd: Wrocław

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


... 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...
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 Aktualny czas: 24.08.2025 - 20:34