2016-11-03 106 views
0

我想從2個表中選擇數據,第2個表由第3個表中存儲的值指定。 我的表是:從表中選擇取決於行值

  1. 用戶
  2. USER_TYPE
  3. 可能是5個表之一(管理員,買方,賣方,會計師,送貨員)

所需的查詢(這我不t如何實現它)必須:

I.從users表中選擇一個用戶表,其中_id等於某個id。

二,我們得到user_type(它的int值是指user_type.type_id)字段值(該表具有type_id和表名,例如[「1」=>「買家」,「2」=>「賣家」,... ])

三,現在我們現在是什麼用戶類型和表名包含關於此用戶的更多信息

四。從表格中選擇(買家,賣家,管理員......)並檢索整個數據(根據用戶類型從表格用戶和其他表格(買家,賣家,管理員等等)),其中table.user_id = users_id

我希望流動有意義,謝謝你(任何建議或備選流將不勝感激)

+0

這沒有意義我。 –

+0

那麼你應該有一張表,其中'user_id'和'type_id'映射應該在那裏。 – Jagrati

+0

5張桌子有相同的結構嗎? – Mak

回答

0

然後選擇數據正如@Mak建議,我是能夠實現所需的功能如下:

CREATE DEFINER=`root`@`localhost` PROCEDURE `getUserData`(IN `user_id` INT) 
BEGIN 
DECLARE userTypeID INT; 
DECLARE userTypeTableName TEXT; 
    SELECT user_type into userTypeID FROM users WHERE users._id = user_id LIMIT 1; 
    SELECT name into userTypeTableName FROM user_type WHERE user_type.type_id = userTypeID LIMIT 1; 
    SET @sql_text = concat('select user.*, sp_user.* from users user JOIN ',userTypeTableName,' sp_user ON user._id = sp_user.user_id WHERE user._id = ', user_id); 
    PREPARE stmt FROM @sql_text; 
    EXECUTE stmt; 
    DEALLOCATE PREPARE stmt; 
END 
0

首先從該查詢得到的表名。

table name = select `type_name` from user_type inner join users on user_type.type_id = users.type_id where users.id = anyId. 

從該表

select * from table_name where user_id = anyId