从表中选择取决于行值

时间:2016-11-03 05:44:00

标签: mysql database mysqli

我想从2个表中选择数据,第2个表由第3个表中存储的值指定。 我的表是:

  1. 用户
  2. USER_TYPE
  3. 可以是5个表格之一(管理员,买家,卖家,会计师,送货员)
  4. 所需的查询(我不知道如何实现它)必须:

    予。从用户表中选择_id等于某个ID的用户。

    II。我们得到user_type(这是int值指的是user_type.type_id)字段值(该表有type_id和表的名称,例如[“1”=>“买家”,“2” =>“卖家”,......])

    III。现在我们现在是什么是用户类型和表名,其中包含有关此用户的更多信息

    IV。从表中选择(买家,卖家,管理员......)并检索整个数据(来自表用户和其他表(买家,卖家,管理员等等),具体取决于用户类型)table.user_id = users_id

    我希望这个流程有意义并且感谢你(非常感谢任何建议或替代流程)

2 个答案:

答案 0 :(得分: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

答案 1 :(得分: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