如何从多列条件中获取用户ID的详细信息?

时间:2017-03-11 04:00:48

标签: mysql sql database laravel

我有一个用户表,我需要检索用户的地址,电话和电子邮件,其中包含address_type = 1,phone_type = 1,email_type = 1的列。 ('_type = 1'表示当前用户使用详细信息而其他人未使用和存档记录)

以下是我的表结构

user table

从上表我想获得user_id = 1的地址,电话,电子邮件,条件是address_type = 1,phone_type = 1,email_type = 1

任何帮助都会很棒......

4 个答案:

答案 0 :(得分:1)

您可以使用Eloquent。使用一个简单的查询加载数据:

$data = Model::where('user_id', $userId)->get();

然后从此系列中获取地址,电话号码和电子邮件:

$address = $data->where('address_type', 1)->first()->address;
$phone = $data->where('phone_type', 1)->first()->phone;
$email = $data->where('email_type', 1)->first()->email;

答案 1 :(得分:0)

您可以使用条件聚合:

select id,
       max(case when address_type = 1 then address end) as address,
       max(case when phone_type = 1 then phone end) as phone,
       max(case when email_type = 1 then email end) as email
from t
where id = 1
group by id;

如果" 1"有多个值,则使用group_concat()代替max()来获取所有值。

答案 2 :(得分:0)

我通过在列选择中进行查询得到以下解决方案,如下所示

SELECT DISTINCT user_id,      (来自tsets的地址,其中address_type IN(1))作为地址,      (从tsets中选择电子邮件,其中email_type IN(1))作为电子邮件 来自tsets

答案 3 :(得分:0)

您可以使用以下查询执行此操作:

$user = Model::where('user_id', $userId)
    ->where('address_type', 1)
    ->where('phone_type', 1)
    ->where('email_type', 1)
    ->first();

注意:将模型替换为您的模型名称。

有关Eloquent的更多信息:https://laravel.com/docs/5.4/eloquent#retrieving-models