-1

tbl_users

u_id | u_type | u_first_name
 1      U        I_am_user
 2      E        I_am_emp   
 3      E        I_am_emp2

tbl_order

o_id | u_id | e_id | o_status | pay_status
  1     1       0    pending    Unpaid
  2     1       2    pick       Paid
  3     1       0    pending    Unpaid
  4     1       3    Pick       paid

このクエリを試して、ユーザー名と従業員名を表示しました

SELECT o.*, a.u_first_name as user, b.u_first_name as emp
  FROM `tbl_order` AS o
       LEFT JOIN tbl_users AS a ON a.u_id = o.u_id 
       LEFT JOIN tbl_users AS b ON b.u_id = o.e_id

o_id | u_id | e_id |  user |  emp | pay_staus

未払いの(pay_status)レコードを最初に表示し、次にe_id=0レコードしてから残りをすべて表示するための条件(順序またはその他の1)をどのように指定しますか?

4

2 に答える 2

0

句からのクエリはWHERE次のようになります。

WHERE e_id = 0 OR pay_status = 'Unpaid'
ORDER BY pay_status DESC;

したがって、クエリ全体は次のようになります。

SELECT o.*, a.u_first_name as user, b.u_first_name as emp
  FROM `tbl_order` AS o
       LEFT JOIN tbl_users AS a ON a.u_id = o.u_id 
       LEFT JOIN tbl_users AS b ON b.u_id = o.e_id
  WHERE e_id = 0 OR pay_status = 'Unpaid'
  ORDER BY pay_status DESC;

編集:OPのコメントから

すべてのレコードを特定の順序で表示したい場合は、次のORDER BYような句を使用するだけです。

ORDER BY pay_status DESC, e_id ASC;
于 2012-09-18T06:51:53.380 に答える
0

これを試して:

select * from(
SELECT o.*, a.u_first_name as user, b.u_first_name as emp, 0 as rnk 
FROM `tbl_order` AS o
LEFT JOIN tbl_users AS a ON a.u_id = o.u_id 
LEFT JOIN tbl_users AS b ON b.u_id = o.e_id
where pay_status='Unpaid'    
union all
SELECT o.*, a.u_first_name as user, b.u_first_name as emp, 1 as rnk 
FROM `tbl_order` AS o
LEFT JOIN tbl_users AS a ON a.u_id = o.u_id 
LEFT JOIN tbl_users AS b ON b.u_id = o.e_id
where pay_status!='Unpaid' and    e_id=0
union all
SELECT o.*, a.u_first_name as user, b.u_first_name as emp, 2 as rnk 
FROM `tbl_order` AS o
LEFT JOIN tbl_users AS a ON a.u_id = o.u_id 
LEFT JOIN tbl_users AS b ON b.u_id = o.e_id
where pay_status!='Unpaid' and    e_id!=0)a
order by rnk
于 2012-09-18T06:06:13.860 に答える