ПОКАЗАТЬ КОЛОННЫ ИЗ Товаров, ГДЕ условие И [в столбце есть хотя бы одно значение] - PullRequest
0 голосов
/ 31 марта 2012

У меня есть таблица с множеством разных столбцов, например

resolution, brightness, type, width, camera_type, projection_type etc 

Мне нужно получить имена только тех столбцов, которые имеют отношение, например, к LED-телевизорам, для создания фильтров, - а это значит, что мне нужно как-то

SHOW COLUMNS FROM Goods WHERE category_id = 5 AND [there is at least one value in the column for a row that meets the category_id = 5 condition]

Возможно ли это вообще?

Ответы [ 2 ]

0 голосов
/ 31 марта 2012

Я предполагаю, что вы хотите, чтобы имена столбцов имели ненулевое значение, где category_id = 5. Трудность здесь заключается в том, чтобы выяснить, какие столбцы имеют ненулевое значение, когда category_id = 5. Это должно быть выполняется по каждому столбцу, но может быть выполнено.

Если честно ... Я не работаю в MySql, но я уверен, что вы можете следовать и вносить любые необходимые изменения.

-- create a temp table to hold the results
CREATE TEMPORARY TABLE TempTable (columnName varchar(100));  

-- create a bunch of dynamic SQL to insert its name into the temp table when category_id = 5 and its value is not null

DECLARE column_name VARCHAR(100);

DECLARE no_more_rows BOOLEAN;
DECLARE loop_cntr INT DEFAULT 0;
DECLARE num_rows INT DEFAULT 0;

-- Declare the cursor
DECLARE columns_cur CURSOR FOR
  SELECT
      column_name
  FROM information_schema.columns
  WHERE TABLE_NAME = 'Goods';

-- Declare 'handlers' for exceptions
DECLARE CONTINUE HANDLER FOR NOT FOUND
  SET no_more_rows = TRUE;

OPEN columns_cur;
  select FOUND_ROWS() into num_rows;

the_loop: LOOP

  FETCH  columns_cur 
  INTO   column_name;

  IF no_more_rows THEN
      CLOSE columns_cur;
      LEAVE the_loop;
  END IF;

  PREPARE stmt FROM 'IF(EXISTS(SELECT * FROM Goods WHERE ? IS NOT NULL AND catetory_id = 5)) INSERT INTO TempTable (column_name) VALUES ('?');'

  EXECUTE stmt USING @column_name;
  DEALLOCATE PREPARE stmt;

END LOOP the_loop;
0 голосов
/ 31 марта 2012

Вы можете поставить условие на строки, которые хотите получить, за это отвечает предложение where.Нужные столбцы нужно указывать только в операторе выбора, нет способа указать, какой столбец нужно выбрать.Получив результаты, вы можете решить, какие столбцы использовать, в зависимости от значения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...