2012-03-31 73 views
0

我有很多不同的列的表,像SHOW COLUMNS FROM商品WHERE條件,[有列至少一個值]

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] 

這是可能的嗎?

回答

1

我猜你想要的是有一個非null值的列名,其中category_id = 5。這裏的難點是找出哪些列有一個非null值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

您可以將條件放在要獲取的行上,where子句負責它。所需的列僅在select語句中指定,無法指定要選擇的列。一旦你有結果,你可以決定使用哪些列,具體取決於數值。

+0

這將是魯莽的,因爲表中有幾千行 – Dan 2012-03-31 16:17:22

相關問題