【问题标题】:select an array选择一个数组
【发布时间】:2017-12-13 21:32:36
【问题描述】:

你知道如何从 sql 中获取 .. 只有一种 .. 语言 ..。

我的结果会返回

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

例如:

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

如果使用 foreach 肯定会得到。但我需要一个 sql 调用。

我用于创建报告..这是我的完整代码

英语/马来语/普通话/泰米尔语有 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);

【问题讨论】:

  • 1.你试过写什么代码? 2. SQL不是最好的事情吗? 3.你已经标记了laravel所以有什么原因,你不能在PHP中做,只需要在SQL做? 4. 标记您的数据库
  • user_languages['English'] 是无效的 SQL。您使用的是哪个DBMS?后格雷斯?甲骨文?
  • 我正在使用 phpMyAdmin。我想换行。 (CASE WHEN Skill.user_languages IS NOT NULL THEN 10 ELSE 0 END)AS c_language Skill.user_languages{"English"} 如果不为空则得到 2.5

标签: sql laravel


【解决方案1】:
$langs = DB::table('your_table')
                ->where('user_languages->English', '!=', 'null')
                ->get();

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-03-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-05-01
    • 1970-01-01
    相关资源
    最近更新 更多