![]() |
![]() |
![]()
Post
#1
|
|
Grupa: Zarejestrowani Postów: 254 Pomógł: 7 Dołączył: 9.10.2007 Skąd: Poznań Ostrzeżenie: (0%) ![]() ![]() |
Witam,
Jak trzymać miasta w bazie. Otóż mam tabele 'users', każdy użytkownik ma swoje miasto. Pytanie czy poniższe rozwiązanie jest optymalne. Chce zrobić tak: Utworzyć tabelę 'cities' z polami: id | city id - zawiera nazwe miasta bez polskich znaków i będzie kluczem dla każdego miasta city - zawiera poprawną nazwę miasta z polskimi znakami Tabela 'users' w polu 'cities_id' będzie zawierać włąśnie klucz obcy miasta (czyli wartość z pola 'id' z tabeli 'cities') Dlaczego jako klucza nie chce używać liczby INT, ponieważ dzięki klucza w formie jak wyżej można będzie sortować użytkowników po mieście. W przypadku klucza typu INT sortowanie odpada. Gdyż w polu 'cities_id' w tabeli 'users' nie ma możliwości sortowania w ten sposób po mieście. |
|
|
![]() |
![]()
Post
#2
|
|
Grupa: Moderatorzy Postów: 6 072 Pomógł: 861 Dołączył: 10.12.2003 Skąd: Dąbrowa Górnicza ![]() |
W Twoim zapytaniu powinieneś mieć utworzone 2 indeksy:
1. na kluczu obcym w tabeli użytkowników łączących rekord z tabelą miast. 2. na nazwie miasta w tabeli miast. Jeśli dodatkowo chciałbyś sortować użytkowników również po nazwie użytkownika to załóż indeks na to pole (najlepiej unikalny). PS: Ten dodatkowy WHERE jest kompletnie zbędny, a dodatkowo połączenie LEFT JOIN + ten WHERE da tak naprawdę samo JOIN (czyli jeśli użytkownik nie ma przypisanego miasta to nie zostanie wyświetlony). |
|
|
![]() ![]() |
![]() |
Aktualny czas: 17.10.2025 - 01:07 |