Mysql
 sql >> база данни >  >> RDS >> Mysql

Как да избера колона(и) по тяхната числова позиция в таблица?

Почти НИКОГА не трябва да разчитате на номера на колона в таблица във вашия код (въпреки че теоретично МОЖЕТЕ да го направите технически).

Има много причини, една от най-важните е, че някой винаги може да ПРОМЕНИ таблицата и да вмъкне колона в началото/средата, нарушавайки напълно кода ви.

Втората причина е, че позициите на колоните - дори ако приемете, че таблицата никога не се променя - правят абсолютно НЕЧЕТИВ и следователно невъзможен за поддържане на код. Ще си спомните ли, че колона 13 беше „last_name_3“ след 2 години?

Моля, имайте предвид, че ако проблемът ви е, че например имате нещо като SELECT fn11, fn12, fn13, ... fn32 във вашия код и смятате, че изписването на fn11..fn32 е плъзгане, вие не само сте 100% правилни, но трябва абсолютно да премахнете споменатото плъзгане чрез идиоми на Perl, както следва:"SELECT " . join(", ", map { "fn$_" } (11..32));

Като казах това, ако искате да знаете как да го направите ТЕОРЕТИЧЕСКИ, просто като упражнение за "готин технологичен трик", не знам добър начин да го направите общо взето чрез DBI, но обикновено можете да го направите в база данни- специфичен начин.

За да направите това, трябва да отбележите, че:

  1. Почти ВСИЧКИ бази данни създават таблици чрез някакъв вид израз "CREATE TABLE", който приема ПОРЪЧЕН списък от колони (повечето релационни бази данни всъщност съхраняват физически стойности в реда в този ред, така че е важно - дори ако теоретичното релационно изчисление третира колоните като ред - по-малко, както каза Марког).

  2. Почти ВСИЧКИ бази данни съдържат специална таблица, която изброява кои таблици съдържат кои колони (syscolumns в Sybase, INFORMATION_SCHEMA.COLUMNS в MySQL) и тази таблица съдържа числов идентификатор на колона, която се използва за подреждането им по същия начин като поръчката за създаване; или дори специално поле "поръчка" (напр. ORDINAL_POSITION стойност в MySQL).

    Така че можете предварително да потърсите подреден списък с колони за желаната от вас таблица и техния ред. За да направите заявка за MySQL, SELECT COLUMN_NAME, ORDINAL_POSITION FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME="XXX" . Съхранявайте данните в списък @columns (или ако имате много таблици, хеш от масиви, %columns, като името на таблицата е ключът).

    След това, когато създавате заявка, просто кажете

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

    Моля, имайте предвид, че действителната SQL, изпратен до сървъра, ще съдържа имена на колони, НО вие няма да кодирате твърдо тези имена никъде в кода си.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Какво ще стане, ако пусна MySQL колона, без първо да пусна нейния индекс?

  2. MySQL получава позиция на ред в ORDER BY

  3. MySQL IFNULL() Обяснено

  4. TIMESTAMPADD() Примери – MySQL

  5. Връзка един към много в MySQL - как да изградим модел?