Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [MySQL] Komenda do sortowania tabeli?
Forum PHP.pl > Forum > Przedszkole
lesz735
Polecenie SELECT*FROM tabela ORDER BY nazwisko zwraca wysortowane wyniki. Chciałbym posortować tabelę żródłową czy jest na to jakoś komenda?
Kshyhoo
Masz bana na Google? jak posortować tabelę MySQL.
lesz735
Nie mam bana; przejrzałem kilka odpowiedzi: są typu "po co ci to" lub ORDER BY. Przejrzałem też też PHP i MySql 785 stron prawie bez obrazków a ponieważ nie mam zamiaru tu siedzieć do emerytury więc proszę dobrych ludzi żeby podzielili się swoją wiedzą jeżeli zechcą; gdybyś potrzebował podpowiedzi z elektryki to zapraszam, w tym już jestem dobry.
Kshyhoo
Wiesz, leniom nie wróżymy przyszłości na tym Forum...
Pierwszy wynik a linku, który podałem: http://webmade.org/kursy-online/sortowanie...-kurs-mysql.php
Cytat
Rodzaj sortowania nie jest obowiązkowy. Dostępne są dwa rodzaje sortowania:

ASC - sortowanie rosnąco, domyślny sposób sortowania
DESC - sortowanie malejąco

Przykład zastosowania:

SELECT `id`, `nazwisko` FROM `nba` ORDER BY `punkty` DESC

Powyższy przykład wyświetli wszystkie wiersze tabeli nba posortowane według pola punky od największej wartość do najmniejszej. Możemy również sortować po kilku polach, np:

SELECT `id`, `nazwisko` FROM `nba` ORDER BY `punkty`, `nazwisko` DESC
lesz735
Te komendy to ja znam; może się mylę bo jestem bardzo początkujący ale myślę że Twoja odpowiedź jest błędna ponieważ sortuje wyniki a nie tabelę; jeżeli sortuje tabelę to po Twojej komendzie komenda SELECT*FROM nba powinna zwrócić tabelę posortowaną a raz sprawdziłem i tak nie jest. Sprawdzę jeszcze dokładniej i odpiszę; być może za kilka dni bo teraz mój czas na sql się kończy.
Pozdrawiam.
//faktycznie jestem leniwy ale dużo pracuję
Kshyhoo
Cytat(lesz735 @ 18.01.2015, 17:30:15 ) *
...myślę że Twoja odpowiedź jest błędna ponieważ sortuje wyniki a nie tabelę

Może napisz dokładniej, co chcesz osiągnąć...
SpiritCode
  1. ALTER TABLE tablename ORDER BY columnname ASC;

Pamiętaj, że każda modyfikacja danych nie spowoduje że znów się posortują. Chyba, że napiszesz do tego procedurę wink.gif
Crozin
1. W SQL-u o ile nie podasz jawnie sortowania (klauzula ORDER BY) należy założyć, że wyniki zwrócone są w kompletne losowej kolejności.
2. Zasugerowane przez @SpiritCode rozwiązanie na 99% nie jest tym czego potrzebujesz ani szukasz: http://dev.mysql.com/doc/refman/5.7/en/alt...140236079069136
3. Dlaczego po prostu nie chcesz dodać do zapytania klauzuli ORDER BY?
lesz735
Cytat(Crozin @ 18.01.2015, 20:23:10 ) *
3. Dlaczego po prostu nie chcesz dodać do zapytania klauzuli ORDER BY?
.
Chcę na tabeli posortowanej wg innego klucza wykonywać inne operacje a wtedy kolejność rekordów W ŹRÓDŁOWEJ tabeli będzie miała znaczenie.
Crozin
Możesz rozwinąć? Bo wygląda na to, że w innym miejscu masz coś konkretnie zrypanego. Szczególnie zważywszy na punkt pierwszy z mojego wcześniejszego postu.
lesz735
Cytat(SpiritCode @ 18.01.2015, 18:06:33 ) *
  1. ALTER TABLE tablename ORDER BY columnname ASC;

Dzięki bardzo!! smile.gif. Prosta odpowiedź na moje pytanie. Działa poprawnie, sortuje tabelę źródłową a nie wyniki:
mysql> SELECT *FROM czas1;
+----+-----------+-------------+
| id | imie | nazwisko |
+----+-----------+-------------+
| 7 | Adam | Małysz |
| 8 | Artur | Wielki |
| 9 | Sebastian | Małolepszy |
| 10 | Bernard | Aautorski |
+----+-----------+-------------+
4 rows in set (0.00 sec)

mysql> ALTER TABLE czas1 ORDER BY nazwisko;
Query OK, 4 rows affected (0.20 sec)
Records: 4 Duplicates: 0 Warnings: 0

mysql> SELECT * FROM czas1;
+----+-----------+-------------+
| id | imie | nazwisko |
+----+-----------+-------------+
| 10 | Bernard | Aautorski |
| 9 | Sebastian | Małolepszy |
| 7 | Adam | Małysz |
| 8 | Artur | Wielki |
+----+-----------+-------------


Cytat(Crozin @ 18.01.2015, 20:23:10 ) *
1. W SQL-u o ile nie podasz jawnie sortowania (klauzula ORDER BY) należy założyć, że wyniki zwrócone są w kompletne losowej kolejności.

Chyba niekoniecznie losowy bo po zapytaniu o rekord 3 takiego wyniku się spodziewałem:

// to do tej tabeli po komendzie ALTER.

mysql> SELECT * FROM czas1 LIMIT 2,1;
+----+------+----------+
| id | imie | nazwisko |
+----+------+----------+
| 7 | Adam | Małysz |


Dziękuję za zainteresowanie moim tematem.


SpiritCode
Załapałem się na 1% smile.gif
Crozin
@lesz735: Ale zdajesz sobie sprawę z tego, że:
1. Dodanie bądź aktualizacja rekordów zniszczy ten porządek?
2. Zadziała to wyłącznie dla tabel typu MyISAM, których raczej nie powinieneś używać - InnoDB jest zdecydowanie preferowane.
3. Niemal pewne jest, że Twój inny kod, który wymaga takich dziwnych warunków jest zrypany.
SpiritCode
Fakt, że czegoś takiego jak srotowanie tabeli źródłowej jest do kitu to jedno.
Inna rzecz, że możesz w dowolnej kolejności przecież posortować wynik zapytania.
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.