сохранить результат множественного выбора в одну переменную - PullRequest
0 голосов
/ 24 января 2019

У меня есть этот запрос, который хорошо работает в текущем сценарии. Но, как ясно видно из php-кода, вычисление точек выполняется после выполнения запроса mysql. Я хочу рассчитать баллы в запросе MySQL, чтобы пользователи могли фильтровать результаты по набранным баллам.

Короче говоря, я хочу получить $ finalpoints вывод переменной непосредственно из запроса mysql для каждой строки.

Я думал в шаблоне что-то вроде этого, но не мог понять. Пожалуйста, предложите какой-нибудь лучший способ сделать это.

if(count(DISTINCT j.e_qua_typ) as t_edu >0, @x+=20,0)

Завершить запрос

SET @x = 0;
select 
    a.id, a.fname, a.lname, b.u_image_path, a.activation, b.m_no, b.u_salary, b.u_not_period, b.u_job_typ, count(c.w_u_id) as   
    Total_org_count, SUM(COALESCE(DATEDIFF(COALESCE(c.w_end_dt,CURDATE()), c.w_start_dt),0)) total_days,
    (select CONCAT(d.w_designation,'-',d.w_comp_name) AS ConcatenatedString from u_work_exp d where d.w_is_current='Y' and 
     d.w_u_id=a.id) as designation,
    (select count(e.ref_by_uid) from job_referrals e where e.ref_by_uid=a.id and (CURRENT_DATE-e.ref_datetime)<=90) as t_referral,
    (select count(f.end_by_uid) from s_endorsements f where f.end_by_uid=a.id and (CURRENT_DATE-f.end_datetime)<=90) as t_endorsements,
    (select count(h.seek_id) from s_follow_t h where h.seek_id=a.id and (CURRENT_DATE-h.follow_date)<=90) as t_follow,
    count(DISTINCT j.e_qua_typ) as t_edu,
    count(DISTINCT k.s_u_id) as t_skills,
    count(DISTINCT l.l_u_id) as t_lang,
    count(DISTINCT c.w_u_id) as t_work,
    (select count(m.uid) from login_history m where m.uid=a.id and (CURRENT_DATE-m.Login_date_time)<=15) as t_activeness,
    count(DISTINCT n.seek_id) as t_comp_review,
    count(DISTINCT o.blog_owner_id) as t_blogs,
    (select count(p.m_u_id) from group_members p where p.m_u_id=a.id and (CURRENT_DATE-p.m_join_date)<=90) as t_groups,
    count(DISTINCT q.course_id) as t_learning_bought
from usertables a
    LEFT JOIN u_dtls b on b.u_id=a.id
    LEFT JOIN u_work_exp c on a.id=c.w_u_id
    LEFT JOIN u_edu_dtls j on j.e_u_id=a.id
    LEFT JOIN u_skills_dtls k on k.s_u_id=a.id
    LEFT JOIN u_lang_dtls l on l.l_u_id=a.id
    LEFT JOIN s_company_review n on n.seek_id=a.id
    LEFT JOIN blogs o on o.blog_owner_id=a.id
    LEFT JOIN learnings_buy_tb q on q.lrn_user_id=a.id
group by a.id
order by a.id desc

Расчет PHP-очков

$points = "";
//calculate scoring points
if($row['t_referral']>0){ $points+=25; }
if($row['t_endorsements']>0){ $points+=5; }
if($row['t_follow']>0){ $points+=10; }
if(!empty($row['u_salary']) && $row['t_edu']>0 && $row['t_skills']>0 && $row['t_lang']>0 && $row['t_work']>0){
    $points+=20; 
}
if($row['t_activeness']>0){ $points+=5; }
if($row['t_comp_review']>0){ $points+=10; }
if($row['t_blogs']>0){ $points+=10; }
if($row['t_groups']>0){ $points+=5; }
if($row['t_learning_bought']>0){ $points+=10; }

$finalpoints = $points / 20;

1 Ответ

0 голосов
/ 24 января 2019

Вы можете заключить запрос в подзапрос производной таблицы, а затем использовать выражение во внешнем запросе для вычисления ваших конечных точек:

SELECT (
  IF(t_referral>0, 25, 0) +
  IF(t_endorsements>0, 5, 0) +
  IF(t_follow>0, 10, 0) +
  IF(u_salary>0 AND t_edu>0 AND t_skills>0 AND t_lang>0 AND t_work>0, 20, 0) +
  IF(t_activeness>0, 5, 0) +
  IF(t_comp_review>0, 10, 0) +
  IF(t_blogs>0, 10, 0) +
  IF(t_groups>0, 5, 0) +
  IF(t_learning_bought>0, 10, 0)
 )/20 AS finalpoints
FROM (
 ...your query...
) AS t

Я не был уверен, что такое u_salary, илипочему он будет пустым вместо 0. Поэтому не стесняйтесь модифицировать это решение для ваших данных, но принцип в том, что я пытаюсь показать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...