2013-03-14 51 views
0

我有一個表,其中有一個名爲'type'的列。我在該列保留表名(作爲類型名稱)。我想檢查一行的類型(表名),並使用一個id從該表中獲取數據。是否可以在單個查詢中執行?使用動態SQL查詢選擇數據

這裏是主表的結構 -

CREATE TABLE `post` (
    `post_id` int(11) NOT NULL AUTO_INCREMENT, 
    `user_id` int(11) NOT NULL, 
    `column` enum('1','2','3') NOT NULL, 
    `type` enum('post_image','post_video') NOT NULL, 
    `title` varchar(255) CHARACTER SET utf8 NOT NULL, 
    `description` text CHARACTER SET utf8 NOT NULL, 
    `thumb` varchar(255) NOT NULL, 
    `post_date` datetime NOT NULL, 
    `views` int(11) NOT NULL, 
    `status` int(11) NOT NULL, 
    PRIMARY KEY (`post_id`) 
) ENGINE=MyISAM DEFAULT CHARSET=latin1; 

這裏有兩個表用於兩種不同類型的在上述柱 -

CREATE TABLE `post_image` (
    `post_image_id` int(11) NOT NULL AUTO_INCREMENT, 
    `post_id` int(11) NOT NULL, 
    `image` varchar(255) NOT NULL, 
    PRIMARY KEY (`post_image_id`) 
) ENGINE=InnoDB DEFAULT CHARSET=latin1; 


    CREATE TABLE `post_video` (
    `video_remote_id` int(11) NOT NULL AUTO_INCREMENT, 
    `post_id` int(11) NOT NULL, 
    `video_type` enum('vimeo','youtube') NOT NULL, 
    `video_id` int(11) NOT NULL, 
    `video_url` varchar(255) NOT NULL, 
    `video_title` int(11) NOT NULL, 
    `video_duration` int(11) NOT NULL, 
    PRIMARY KEY (`video_remote_id`) 
) ENGINE=InnoDB DEFAULT CHARSET=latin1; 
+0

你可以請給表結構,這將是有益的。謝謝。 – 2013-03-14 08:45:46

+0

@AlexZ - 我給出了問題描述中的結構... – rafi 2013-03-14 08:50:55

+0

@DevangRathod - 我已經嘗試過這樣 select'select * from post p left join ['+ p.type +'] d on p.id = d.post_id' – rafi 2013-03-14 08:51:57

回答

1

在單個查詢 - NO。

嘗試使用prepares statement。將表的名稱讀入變量,構建SELECT查詢字符串並使用EXECUTE命令執行它。

+0

我明白了......感謝您的幫助。現在,我寧願使用php而不是mysql來做這個邏輯......再次感謝! – rafi 2013-03-14 08:57:17