Mysql
 sql >> Baza danych >  >> RDS >> Mysql

Jak wybrać kolumnę (kolumny) według ich pozycji liczbowej w tabeli?

Prawie NIGDY nie powinieneś polegać na numerze kolumny w tabeli w jakimkolwiek kodzie (nawet jeśli teoretycznie MOŻESZ to zrobić technicznie).

Powodów jest wiele, jednym z najważniejszych jest to, że ktoś zawsze może ZMIENIĆ tabelę i wstawić kolumnę na początku/środku, całkowicie łamiąc kod.

Drugim powodem jest to, że pozycje kolumn — nawet jeśli założysz, że tabela nigdy się nie zmienia — sprawiają, że jest to absolutnie NIECZYTELNE, a zatem niemożliwe do utrzymania kodu. Czy pamiętasz, że kolumna 13 była „last_name_3” za 2 lata?

Pamiętaj, że jeśli Twój problem polega na tym, że na przykład masz coś takiego jak SELECT fn11, fn12, fn13, ... fn32 w kodzie i czujesz, że przeliterowanie fn11..fn32 jest przeciąganiem, nie tylko masz 100% racji, ale absolutnie powinieneś usunąć to przeciągnięcie za pomocą idiomów Perla, w następujący sposób:"SELECT " . join(", ", map { "fn$_" } (11..32));

Powiedziawszy to, jeśli chcesz wiedzieć, jak to zrobić TEORETYCZNIE, jako ćwiczenie „fajnej sztuczki technologicznej”, nie wiem, jak zrobić to ogólnie przez DBI, ale zwykle możesz to zrobić w bazie danych- konkretny sposób.

W tym celu należy pamiętać, że:

  1. Prawie WSZYSTKIE bazy danych tworzą tabele za pomocą pewnego rodzaju instrukcji „CREATE TABLE”, która przyjmuje uporządkowaną listę kolumn (większość relacyjnych baz danych faktycznie fizycznie przechowuje wartości w wierszu w tej kolejności, więc jest to ważne - nawet jeśli teoretyczny rachunek relacyjny traktuje kolumny jako kolejność- mniej, jak powiedział Marcog).

  2. Prawie WSZYSTKIE bazy danych zawierają specjalną tabelę, która zawiera listę tabel zawierających które kolumny (syscolumns w Sybase, INFORMATION_SCHEMA.COLUMNS w MySQL), a ta tabela zawiera numeryczny identyfikator kolumny, który jest używany do ich uporządkowania tak samo, jak do zamówienia "utwórz"; a nawet specjalne pole „zamówienie” (np. ORDINAL_POSITION wartość w MySQL).

    Możesz więc - z wyprzedzeniem - wyszukać uporządkowaną listę kolumn dla żądanej tabeli i ich kolejność. Aby wyszukać MySQL, SELECT COLUMN_NAME, ORDINAL_POSITION FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME="XXX" . Przechowuj dane na liście @columns (lub, jeśli masz wiele tabel, hash tablic, %columns, gdzie nazwa tabeli jest kluczem).

    Następnie, tworząc zapytanie, po prostu mówisz

    "select $columns{table1}->[11],$columns{table1}->[13], ...."

    Należy pamiętać, że rzeczywista SQL wysyłany do serwera będzie zawierał nazwy kolumn, ALE nie będziesz ich kodować na stałe w dowolnym miejscu kodu.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. BŁĄD 1366 (HY000):Nieprawidłowa wartość ciągu:„\xF0\x9F\x98\x9C” dla kolumny „komentarz” w wierszu 1

  2. Czy w MySQL można używać zapytania krzyżowego/przestawnego?

  3. Wybieranie losowych wierszy za pomocą MySQL

  4. Jak wybrać wpisy z tej relacji?

  5. Wydajność MySQL:pojedyncza tabela lub wiele tabel