Выборка из таблицы пустых СТОЛБЦОВ.

Acraft

Новичок
Выборка из таблицы пустых СТОЛБЦОВ.

Добрый вечер. Появилась задача пробежаться по таблице и посмотреть, есть ли в ней столбцы, в которых вообще нет записей. (чтобы потом от них избавиться как от ненужных). Таблицы валяется по разным базам и для каждой количество записей колеблется от 10 000 до 500 000.

Делаем
PHP:
SHOW COLUMNS FROM tbl_name;
Имена столбцов есть.
Теперь нужно каким-то образом вытащить столбцы, в которых вообще нет записей:
PHP:
SELECT column FROM tbl_name;
Теперь роемся в полученном результате в поисках чего-то отличного от 'FALSE', '0', 'NULL' или ''.
Если находим - переход к следующему столбцу.

НО. Беда такого подхода в слишком медленном выполнении.
Можно ли найти пустые столбцы с помощью SQL запроса?
 

Acraft

Новичок
Не будте 'компилятором' :), мыслите абстрактно.

Решением проблемы послужило в следующее:
PHP:
   $query="SHOW COLUMNS FROM listings";
   $result=mysql_query($query,$mysql_access);
   if (mysql_errno()>0) {echo mysql_errno()." : ".mysql_error()."<br>";}
   $f=fopen('empty_rows.txt','a');
   while ($row=mysql_fetch_array($result)) 
        {
//         echo $row[0]."<br>";
         $query_1="SELECT ".$row[0]." FROM listings";
         $result_1=mysql_query($query_1, $mysql_access);
         if (mysql_errno()>0) {echo mysql_errno()." : ".mysql_error()."<br>";}
         $q=0;
         $str='';
         while ($row_1=mysql_fetch_array($result_1)) 
              {
               if (trim($row_1[0])=='NULL' || $row_1[0]=='FALSE' || $row_1[0]=='0')
                 {
                  $row_1[0]=='';
                 }
               $str.=trim($row_1[0]);
              }
         if (trim($str)=='')
           {
            fputs($f,$_POST['db_name'][$from].'.'.$row[0].'---empty'."\n");
            fputs($f,$str."\n");
           }
         else
           {
            fputs($f,$_POST['db_name'][$from].'.'.$row[0].'---NOT EMPTY'."\n");
            fputs($f,substr($str,0,10)."\n");
           }
         unset($query_1); unset($result_1); unset($str); 
        }
   fclose($f);
Но по прежнему интересно, как то же самое можно сделать проще. (например, с помощью запросов MySQl)
 

bgm

&nbsp;
Для конкретного столбца необходимо получить число записей, на которых выполняется требуемое условие "пустоты":

SELECT COUNT(*) FROM 'table_name` WHERE (`table_name.column_for_test' NOT NULL OR ... )

Полученное значение сравниваешь с нулём...
Итого - по одному SQL запросу на каждый столбец.

P.S. Только вот как ты будешь проверять связи в базе данных непонятно.
 

Фанат

oncle terrible
Команда форума
осталось только задать риторический вопрос про структуру таблицы, из которой удаляется столбец таким вот, оригинальным способом
 

Acraft

Новичок
Структура? Хм...
PHP:
CREATE TABLE listings (
  MLS_NUM varchar(8) NOT NULL default '0',
  APP_CVO char(3) default NULL,
  APP_DOV char(3) default NULL,
  APP_DSH char(3) default NULL,
  APP_DSP char(3) default NULL,
  APP_ELC char(3) default NULL,
  APP_FRZ char(3) default NULL,
  APP_GAS char(3) default NULL,
  APP_MCR char(3) default NULL,
  APP_NON char(3) default NULL,
  APP_OTH char(3) default NULL,
  APP_REF char(3) default NULL,
  APP_REL char(3) default NULL,
  APP_RGS char(3) default NULL,
  APP_TCM char(3) default NULL,
  CCL_BBD char(3) default NULL,
  CCL_CEE char(3) default NULL,
  CCL_CEL char(3) default NULL,
  CCL_CHS char(3) default NULL,
  CCL_FFR char(3) default NULL,
  CCL_HTP char(3) default NULL,
  CCL_NON char(3) default NULL,
  CCL_PRP char(3) default NULL,
  CCL_REV char(3) default NULL,
  CCL_RFG char(3) default NULL,
  CCL_RHT char(3) default NULL,
  CCL_RRA char(3) default NULL,
  CCL_SLH char(3) default NULL,
  CCL_WDS char(3) default NULL,
  CCL_WLF char(3) default NULL,
  CCL_MLZ varchar(100) default NULL,
  CCT_BLK char(3) default NULL,
  CCT_BRK char(3) default NULL,
  CCT_CNC char(3) default NULL,
  CCT_FLG char(3) default NULL,
  CCT_FRM char(3) default NULL,
  CCT_GLS char(3) default NULL,
  CCT_MNF char(3) default NULL,
  CCT_OTH char(3) default NULL,
  CCT_SBR char(3) default NULL,
  CCT_SID char(3) default NULL,
  CCT_STC char(3) default NULL,
  CCT_STL char(3) default NULL,
  CCT_SBR1 char(3) default NULL,
  CCT_SWD char(3) default NULL,
  CCT_WOD char(3) default NULL,
  CNT_CCL char(3) default NULL,
  CNT_CTA char(3) default NULL,
  CNT_EXC char(3) default NULL,
  CNT_HCH char(3) default NULL,
  CNT_JTR char(3) default NULL,
  CNT_LAP char(3) default NULL,
  CNT_NOD char(3) default NULL,
  CNT_NON char(3) default NULL,
  CNT_OTH char(3) default NULL,
  DNG_BK char(2) default NULL,
  DNG_DA char(2) default NULL,
  DNG_DBB char(3) default NULL,
  DNG_DK char(2) default NULL,
  DNG_FD char(2) default NULL,
  DNG_OTH char(3) default NULL,
  FLR_CPT char(3) default NULL,
  FLR_HWD char(3) default NULL,
  FLR_OTH char(3) default NULL,
  FLR_TL varchar(4) default NULL,
  FLR_VY char(3) default NULL,
  FLR_LA varchar(100) default NULL,
  FNC_BCK char(3) default NULL,
  FNC_BLK char(3) default NULL,
  FNC_CHL char(3) default NULL,
  FNC_CRS char(3) default NULL,
  FNC_FRT char(3) default NULL,
  FNC_NON char(3) default NULL,
  FNC_OTH char(3) default NULL,
  FNC_SST char(3) default NULL,
  FNC_WOD char(3) default NULL,
  FNC_WRI char(3) default NULL,
  FND_CMB char(3) default NULL,
  FND_OTH char(3) default NULL,
  FND_RSD char(3) default NULL,
  FND_SLB char(3) default NULL,
  FPL_FR char(2) default NULL,
  FPL_FRS char(3) default NULL,
  FPL_GAS char(3) default NULL,
  FPL_LR char(2) default NULL,
  FPL_MBR char(3) default NULL,
  FPL_NON char(3) default NULL,
  FPL_OTH char(3) default NULL,
  FPL_WOD char(3) default NULL,
  FTR_AB char(2) default NULL,
  FTR_ACC char(3) default NULL,
  FTR_ADP char(3) default NULL,
  FTR_AGR char(3) default NULL,
  FTR_ATR char(3) default NULL,
  FTR_BBQ char(3) default NULL,
  FTR_BRM char(3) default NULL,
  FTR_CB char(2) default NULL,
  FTR_CUL char(3) default NULL,
  FTR_D char(1) default NULL,
  FTR_DBR char(3) default NULL,
  FTR_ELV char(3) default NULL,
  FTR_FR char(2) default NULL,
  FTR_GH char(2) default NULL,
  FTR_GTC char(3) default NULL,
  FTR_HR char(2) default NULL,
  FTR_LF char(2) default NULL,
  FTR_LNF char(3) default NULL,
  FTR_LNR char(3) default NULL,
  FTR_MR char(2) default NULL,
  FTR_OTH char(3) default NULL,
  FTR_PET char(3) default NULL,
  FTR_PLY char(3) default NULL,
  FTR_RC char(2) default NULL,
  FTR_SA char(2) default NULL,
  FTR_TC char(2) default NULL,
  FTR_V char(1) default NULL,
  FTR_WK char(2) default NULL,
  FTR_WTR char(3) default NULL,
  GAR_1 char(1) default NULL,
  GAR_2 char(1) default NULL,
  GAR_3 char(1) default NULL,
  GAR_4P char(2) default NULL,
  GAR_ATT char(3) default NULL,
  GAR_CON char(3) default NULL,
  GAR_CP char(2) default NULL,
  GAR_DA char(2) default NULL,
  GAR_DET char(3) default NULL,
  GAR_DO char(2) default NULL,
  GAR_GAR char(3) default NULL,
  GAR_NON char(3) default NULL,
  GAR_OTH char(3) default NULL,
  GAR_PTH char(3) default NULL,
  GAR_TAN char(3) default NULL,
  HOA_CPL char(3) default NULL,
  HOA_CTC char(3) default NULL,
  HOA_EXM char(3) default NULL,
  HOA_FND char(3) default NULL,
  HOA_GBL char(3) default NULL,
  HOA_INS char(3) default NULL,
  HOA_NON char(3) default NULL,
  HOA_OTH char(3) default NULL,
  HOA_REC char(3) default NULL,
  HOA_RFM char(3) default NULL,
  HOA_SEC char(3) default NULL,
  HOA_SNA char(3) default NULL,
  HOA_SPA char(3) default NULL,
  HOA_STR char(3) default NULL,
  HOA_TRS char(3) default NULL,
  HOA_UNK char(3) default NULL,
  HOA_WTH char(3) default NULL,
  HOA_WTR char(3) default NULL,
  HRS_NO char(1) default NULL,
  HRS_OTH char(1) default NULL,
  HRS_YES char(1) default NULL,
  HSE_CDM char(3) default NULL,
  HSE_COP char(3) default NULL,
  HSE_MOD char(3) default NULL,
  HSE_PUD char(3) default NULL,
  HSE_SFD char(3) default NULL,
  HSE_TWN char(3) default NULL,
  LDY_ARE char(3) default NULL,
  LDY_CMN char(3) default NULL,
  LDY_ELC char(3) default NULL,
  LDY_GAR char(3) default NULL,
  LDY_GAS char(3) default NULL,
  LDY_NO char(2) default NULL,
  LDY_OTH char(3) default NULL,
  LDY_RM char(2) default NULL,
  LDY_UNT varchar(4) default NULL,
  LSH_CNR char(3) default NULL,
  LSH_FLG char(3) default NULL,
  LSH_IRR char(3) default NULL,
  LSH_REC char(3) default NULL,
  LSH_UNK char(3) default NULL,
  LSH_ZER char(3) default NULL,
  POL_ABV char(3) default NULL,
  POL_COM char(3) default NULL,
  POL_FNC char(3) default NULL,
  POL_GAS char(3) default NULL,
  POL_IGG char(3) default NULL,
  POL_IGO char(3) default NULL,
  POL_NON char(3) default NULL,
  POL_NPR char(3) default NULL,
  POL_PER char(3) default NULL,
  POL_PVT char(3) default NULL,
  POL_SOL char(3) default NULL,
  POL_YES char(3) default NULL,
  PPI_ANT char(3) default NULL,
  PPI_CD char(2) default NULL,
  PPI_CW char(2) default NULL,
  PPI_DSH char(3) default NULL,
  PPI_EXT char(3) default NULL,
  PPI_FPL char(3) default NULL,
  PPI_FPS char(3) default NULL,
  PPI_NON char(3) default NULL,
  PPI_OTH char(3) default NULL,
  PPI_PE char(2) default NULL,
  PPI_SAT char(3) default NULL,
  PPI_SEC char(3) default NULL,
  PPI_WTS char(3) default NULL,
  PTO_BAL char(3) default NULL,
  PTO_COV char(3) default NULL,
  PTO_DEC char(3) default NULL,
  PTO_ENC char(3) default NULL,
  PTO_NON char(3) default NULL,
  PTO_OTH char(3) default NULL,
  PTO_PER char(3) default NULL,
  PTO_SLB char(3) default NULL,
  ROF_ASP char(3) default NULL,
  ROF_COM char(3) default NULL,
  ROF_CSH char(3) default NULL,
  ROF_MET char(3) default NULL,
  ROF_OTH char(3) default NULL,
  ROF_SHK char(3) default NULL,
  ROF_TIL char(3) default NULL,
  ROF_WSH char(3) default NULL,
  RVA_COM char(3) default NULL,
  RVA_COV char(3) default NULL,
  RVA_NO char(2) default NULL,
  RVA_PAV char(3) default NULL,
  RVA_POS char(3) default NULL,
  RVA_YES char(1) default NULL,
  SPA_ABV char(3) default NULL,
  SPA_COM char(3) default NULL,
  SPA_GAS char(3) default NULL,
  SPA_IGG char(3) default NULL,
  SPA_IGO char(3) default NULL,
  SPA_NON char(3) default NULL,
  SPA_NPR char(3) default NULL,
  SPA_PER char(3) default NULL,
  SPA_PVT char(3) default NULL,
  SPA_SOL char(3) default NULL,
  SPA_YES char(3) default NULL,
  SPK_AUT char(3) default NULL,
  SPK_DRP char(3) default NULL,
  SPK_FRN char(3) default NULL,
  SPK_MNL char(3) default NULL,
  SPK_NON char(3) default NULL,
  SPK_OTH char(3) default NULL,
  SPK_RR char(2) default NULL,
  SPK_SID char(3) default NULL,
  STC_DRT char(3) default NULL,
  STC_OTH char(3) default NULL,
  STC_PAV char(3) default NULL,
  STC_PRV char(3) default NULL,
  STC_PUB char(3) default NULL,
  STC_ALL varchar(100) default NULL,
  STL_1S char(2) default NULL,
  STL_2S char(2) default NULL,
  STL_3S char(2) default NULL,
  STL_4S char(2) default NULL,
  STL_LL char(2) default NULL,
  STL_OTH char(3) default NULL,
  STL_SL char(2) default NULL,
  STL_TRI char(3) default NULL,
  STL_UL char(2) default NULL,
  STY_CC char(2) default NULL,
  STY_COL char(3) default NULL,
  STY_CON char(3) default NULL,
  STY_FRC char(3) default NULL,
  STY_MED char(3) default NULL,
  STY_MOD char(3) default NULL,
  STY_OTH char(3) default NULL,
  STY_RA char(2) default NULL,
  STY_SPN char(3) default NULL,
  STY_TRA char(3) default NULL,
  STY_TUD char(3) default NULL,
  STY_VCT char(3) default NULL,
  SWR_CP char(2) default NULL,
  SWR_LBD char(3) default NULL,
  SWR_SCN char(3) default NULL,
  SWR_SEP char(3) default NULL,
  SWR_SFP char(3) default NULL,
  SWR_SIS char(3) default NULL,
  SWR_UNK char(3) default NULL,
  TRM_AITD varchar(4) default NULL,
  TRM_ASSM varchar(4) default NULL,
  TRM_CALVET varchar(4) default NULL,
  TRM_CASH varchar(4) default NULL,
  TRM_CONV varchar(4) default NULL,
  TRM_EXCH varchar(4) default NULL,
  TRM_FHA char(3) default NULL,
  TRM_LAND varchar(4) default NULL,
  TRM_LSE char(3) default NULL,
  TRM_LSP char(3) default NULL,
  TRM_NQL char(3) default NULL,
  TRM_OTHRMK char(3) default NULL,
  TRM_OWN char(3) default NULL,
  TRM_VA char(2) default NULL,
  TRM_VANONO varchar(6) default NULL,
  UTL_220 char(3) default NULL,
  UTL_CBL char(3) default NULL,
  UTL_GAS char(3) default NULL,
  UTL_NON char(3) default NULL,
  UTL_PRP char(3) default NULL,
  WTR_NO char(2) default NULL,
  WTR_OTH char(3) default NULL,
  WTR_OWN char(3) default NULL,
  WTR_PUB char(3) default NULL,
  WTR_SHR char(3) default NULL,
  WTR_STC char(3) default NULL,
  WTR_HIG varchar(100) default NULL,
  AGT_EMAIL varchar(40) default NULL,
  APN varchar(12) default NULL,
  CASH_ASSUM varchar(6) default NULL,
  CITY_INSP char(3) default NULL,
  DEPOSIT varchar(6) default NULL,
  ESC_TIME varchar(8) default NULL,
  HOAX varchar(6) default NULL,
  HOAX_PER char(1) default NULL,
  HOAX_PP char(1) default NULL,
  IM_SQFT varchar(6) default NULL,
  LAGT1_1PHN varchar(13) default NULL,
  LAGT1_2PHN varchar(13) default NULL,
  LAGT1_NAME varchar(22) default NULL,
  LAGT2_1PHN varchar(13) default NULL,
  LAGT2_2PHN varchar(13) default NULL,
  LAGT2_NAME varchar(22) default NULL,
  LIST_PRICE int(11) default NULL,
  LO_ADDR varchar(22) default NULL,
  LO_CITY varchar(18) default NULL,
  LO_NAME varchar(22) default NULL,
  LO_PHEXT varchar(6) default NULL,
  LO_PHONE varchar(13) default NULL,
  LO_ZIP varchar(6) default NULL,
  LOT_SQFT varchar(6) default NULL,
  LP_SQFT varchar(7) default NULL,
  MELLO_ROOS char(3) default NULL,
  MODEL_NAME varchar(20) default NULL,
  PHONE_TYP1 varchar(4) default NULL,
  PHONE_TYP2 varchar(4) default NULL,
  POSSESSION varchar(8) default NULL,
  REMRK1 text,
  REMRK2 varchar(70) default NULL,
  REMRK3 varchar(70) default NULL,
  REMRK4 varchar(70) default NULL,
  REMRK5 varchar(70) default NULL,
  RES_TYPE char(3) default NULL,
  SQFT_OBTN varchar(6) default NULL,
  STATUS char(3) default NULL,
  AREA varchar(5) default NULL,
  ST_LIGHTS char(3) default NULL,
  SIDEWALK char(3) default NULL,
  COUNTY char(2) default NULL,
  CURB char(3) default NULL,
  BATHS varchar(5) default NULL,
  BEDROOMS char(2) default NULL,
  STR_DIR char(1) default NULL,
  STR_TYPE varchar(4) default NULL,
  STR_NAME varchar(20) default NULL,
  STR_NUM varchar(16) default NULL,
  CITY varchar(4) default NULL,
  ZIP varchar(6) default NULL,
  UNIT varchar(4) default NULL,
  ZONE varchar(4) default NULL,
  TBM_GRID varchar(6) default NULL,
  TRACT_CDE varchar(6) default NULL,
  TRACT_NAME varchar(14) default NULL,
  TRACT_NUM varchar(6) default NULL,
  YEAR_BUILT varchar(4) default NULL,
  BLKS_EW char(2) default NULL,
  DIR_EW char(1) default NULL,
  TEXT_EW varchar(20) default NULL,
  BLKS_NS char(2) default NULL,
  DIR_NS char(1) default NULL,
  TEXT_NS varchar(20) default NULL,
  ACD_FLAG char(1) default NULL,
  firmID varchar(40) default NULL,
  agentID varchar(50) default NULL,
  agentID2 varchar(10) default NULL,
  vtour text,
  numphotos varchar(20) default NULL,
  UNIQUE KEY MLS_NUM (MLS_NUM)
) TYPE=MyISAM;
Возникли проблемы с быстродействием, вот и занимаюсь оптимизацией.
 

Acraft

Новичок
Ну, как тебе сказать...на сегодня оптимизация завершена, поэтому не очень ;).

Эта таблица (и несколько других) постоянно 'падает' . Приходится выполнять REPAIR и до следующего зависания mysqld.

На данный момент немного перенастроил my.cnf:
key_buffer=64M
table_cache=256
sort_buffer_size=4M
record_buffer=1M
log_slow_queries=path
^^^Предстоит еще разобраться с "медленными" запросами...
и поставил myisam_recover_options=FORCE, чтобы таблицы восстанавливались автоматически.

Вотъ.
 

Acraft

Новичок
А вообще, видимо, придется вспоминать что такое "нормальные формы" и как привести таблицу хотя бы к 3-й....

-~{}~ 07.07.06 20:32:

Автор оригинала: Фанат
я имею в виду - удалением столбцов. сильно оптимизировал?
узнаю минимум в понедельник..
По моему, должно помочь, или нет?
 

Фанат

oncle terrible
Команда форума
а по-моему - нет.

кстати, посмотри на CREATE TABLE, которое тебе покажет сама таблица.
узнаешь много нового =)
 

Acraft

Новичок
Не понял, чем не устраивает CREATE TABLE приведенный выше?
 

Фанат

oncle terrible
Команда форума
меня? не устраивает?
ты меня с кем-то путаешь
лично я от твоего CREATE TABLE в восторге
 

dr-sm

Новичок
Автор оригинала: Acraft
А вообще, видимо, придется вспоминать что такое "нормальные формы" и как привести таблицу хотя бы к 3-й....
Да, проведенная денормализация впечатляет....

этапять :D
 
Сверху