【问题标题】:sql condition to display recordsql条件显示记录
【发布时间】:2012-09-18 05:44:09
【问题描述】:

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

我们如何给条件(order by or other 1)先显示未付款(pay_status)记录 然后e_id=0记录然后全部休息?

【问题讨论】:

  • 你不能ORDER BY pay_status DESC吗?
  • 我试过了,但是我们将如何给出下一个条件?未付 e_id=0
  • 你的意思是按 1,2,3 等排序吗...
  • 能否请您发布您想要的结果集

标签: php mysql sql database codeigniter


【解决方案1】:

您对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;

编辑: (From OP's comment)

如果您想按特定顺序显示所有记录,您只需要像这样使用ORDER BY 子句:

ORDER BY pay_status DESC, e_id ASC;

【讨论】:

  • 我们如何避免“where”条件......因为它只显示 e_id=0 输出就像 1) 所有记录 unpaid 2) 当所有未付记录都显示e_id=0 3) 当所有 e_id=0 记录结束时显示 rest all
  • @Anu 由于您没有回复,我们无法为您提供更多帮助。
【解决方案2】:

试试这个:

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

【讨论】:

  • 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 这个查询是否返回任何内容?
猜你喜欢
  • 1970-01-01
  • 2016-07-11
  • 1970-01-01
  • 2013-08-27
  • 1970-01-01
  • 2011-07-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多