我有一个用户表,我需要检索用户的地址,电话和电子邮件,其中包含address_type = 1,phone_type = 1,email_type = 1的列。 ('_type = 1'表示当前用户使用详细信息而其他人未使用和存档记录)
以下是我的表结构
从上表我想获得user_id = 1的地址,电话,电子邮件,条件是address_type = 1,phone_type = 1,email_type = 1
任何帮助都会很棒......
答案 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