2017-07-10 66 views
-2

你知道如何得到..只有一个.. language .. from sql。选择一个数组

我的结果将返回

"user_languages" => "{"English":"Average","Bahasa Malaysia":"Good","Mandarin":"Don't Know","Tamil":"Don't Know"}" 

my database data

如:

select user_languages['English'] as custom_english 
from MyTable 
where user_languages = "English" 

如果使用的foreach肯定搞定。但我需要一个SQL调用。使用创建的报告..这是我完整的代码

英文/马来文/华/泰米尔

IM有2.5如果不为null 共有10个,如果全部填满它

$users = User::with(array()) 
     ->whereHas('roles', function ($q) { 
      $q->where('name', 'user'); 
     }) 
     ->leftJoin(DB::raw('(
      SELECT users.id, skill.user_languages,    
      (CASE WHEN pic IS NOT NULL THEN 10 ELSE 0 END) AS c_pic, 
      (CASE WHEN about_me IS NOT NULL THEN 10 ELSE 0 END) AS c_about_me, 
      (CASE WHEN full_name IS NOT NULL AND ic_passport IS NOT NULL AND dob IS NOT NULL AND gender IS NOT NULL AND race IS NOT NULL AND nationality IS NOT NULL AND prefer.expected_salary IS NOT NULL THEN 10 ELSE 0 END) AS c_my_details, 
      (CASE WHEN mobile_number IS NOT NULL AND email IS NOT NULL AND address_1 IS NOT NULL AND city IS NOT NULL AND postcode IS NOT NULL AND state IS NOT NULL AND country IS NOT NULL THEN 10 ELSE 0 END) AS c_my_contact, 
      (CASE WHEN skill.skill_description IS NOT NULL THEN 10 ELSE 0 END) AS c_skill_desc, 
      (CASE WHEN edu.school_name IS NOT NULL THEN 10 ELSE 0 END) AS c_education, 
      (CASE WHEN work.company_name IS NOT NULL THEN 10 ELSE 0 END) AS c_work, 
      (CASE WHEN skill.user_languages IS NOT NULL THEN 10 ELSE 0 END) AS c_language 


      FROM users 
      left join (SELECT * FROM user_preferences) prefer on users.id = (prefer.id)     
      left join (SELECT * FROM user_skill_language) skill on users.id = (skill.user_id)     
      left join (SELECT * FROM user_education GROUP BY user_id) edu on users.id = (edu.user_id)     
      left join (SELECT * FROM user_working_experience GROUP BY user_id) work on users.id = (work.user_id)     
      ) user'), function($join) 
     { 
      $join->on(DB::raw("users.id"), '=', DB::raw("(user.id)")); 
     }) 

     ->selectRaw('users.id, users.email, users.mobile_number, users.full_name, users.race') 
     ->selectRaw('(user.c_pic + c_about_me + c_my_details + c_my_contact + c_skill_desc + c_language + c_education + c_work) as total_profile') 


     ->orderBy($list_field, $list_sort) 
     ->paginate(50); 
+0

1你试过写什么代码? 2. SQL不是最好的办法吗? 3.你已经标记了'laravel',所以有一个原因,你不能在PHP中做,只需要在SQL中做? 4.标记数据库 –

+0

'user_languages ['English']'是无效的SQL。你使用哪个[DBMS](https://en.wikipedia.org/wiki/DBMS)? Postgres的?甲骨文? –

+0

即时通讯使用phpMyAdmin。 即时消息想要换行。 (CASE WHEN skill.user_languages IS NOT NULL THEN 10 ELSE 0 END)as c_language skill.user_languages {“English”}如果不为空,则返回2.5 –

回答

0
$langs = DB::table('your_table') 
       ->where('user_languages->English', '!=', 'null') 
       ->get();