【问题标题】:CI 3.1.0 query with if condition带有 if 条件的 CI 3.1.0 查询
【发布时间】:2017-01-06 08:47:52
【问题描述】:
SELECT cat.categoryId, cat.categoryName, coupon.* 
FROM `wrh_category` AS `cat`
INNER JOIN `wrh_coupon` AS `coupon` ON `cat`.`categoryId` = `coupon`.`categoryId`
LEFT JOIN `wrh_saved_coupon` AS `savedCoupon` ON `coupon`.`couponId` = `savedCoupon`.`couponId` AND `savedCoupon`.`is_deleted` = 0
WHERE `cat`.`categoryId` = 2
AND `cat`.`is_deleted` =0
AND `coupon`.`is_deleted` =0
AND `coupon`.`startDate` <= '2016-08-30 07:14:53'
AND `coupon`.`expiryDate` > '2016-08-30 07:14:53'
 LIMIT 2;

我想再显示一个名为“isSaved”的虚拟列, 根据以下条件,值应为“1”或“0”

if (`coupon`.`couponId` == `savedCoupon`.`couponId`)
    return 1;
else
    return 0;

【问题讨论】:

标签: mysql sql


【解决方案1】:

试试这个如果代码:

IF(`coupon`.`couponId` == `savedCoupon`.`couponId`,1,0) as isSaved

在选择为:

SELECT cat.categoryId, cat.categoryName, coupon.*, IF(`coupon`.`couponId` == `savedCoupon`.`couponId`,1,0) as isSaved
FROM `wrh_category` AS `cat`
INNER JOIN `wrh_coupon` AS `coupon` ON `cat`.`categoryId` = `coupon`.`categoryId`
LEFT JOIN `wrh_saved_coupon` AS `savedCoupon` ON `coupon`.`couponId` = `savedCoupon`.`couponId` AND `savedCoupon`.`is_deleted` = 0
WHERE `cat`.`categoryId` = 2
AND `cat`.`is_deleted` =0
AND `coupon`.`is_deleted` =0
AND `coupon`.`startDate` <= '2016-08-30 07:14:53'
AND `coupon`.`expiryDate` > '2016-08-30 07:14:53'
 LIMIT 2;

您可以在 CI 中将其用作:

$query = $this->db->query("YOUR QUERY");

$query = $this->db->query("SELECT cat.categoryId, cat.categoryName, coupon.*, IF(`coupon`.`couponId` == `savedCoupon`.`couponId`,1,0) as isSaved
    FROM `wrh_category` AS `cat`
    INNER JOIN `wrh_coupon` AS `coupon` ON `cat`.`categoryId` = `coupon`.`categoryId`
    LEFT JOIN `wrh_saved_coupon` AS `savedCoupon` ON `coupon`.`couponId` = `savedCoupon`.`couponId` AND `savedCoupon`.`is_deleted` = 0
    WHERE `cat`.`categoryId` = 2
    AND `cat`.`is_deleted` =0
    AND `coupon`.`is_deleted` =0
    AND `coupon`.`startDate` <= '2016-08-30 07:14:53'
    AND `coupon`.`expiryDate` > '2016-08-30 07:14:53'
     LIMIT 2")->result();

【讨论】:

  • 感谢您的回复。如何使用 CI 3.1.0 实现相同的目标?
  • @BHARGAVKAHAR by CI 3.1.0 你的意思是 Active Record 数据库模式吗?
  • @BHARGAVKAHAR 您可以在编辑中使用上述自定义查询。
【解决方案2】:
$this->db->select("cat.categoryId, cat.categoryName, coupon.*, IF(coupon.couponId == savedCoupon.couponId,1,0) as isSaved", FALSE); <br/>
$this->db->from("wrh_category AS cat");<br/>
$this->db->join("wrh_coupon AS coupon", "cat.categoryId = coupon.categoryId", 'inner');<br/>
$this->db->join("wrh_saved_coupon AS savedCoupon", "coupon.couponId = savedCoupon.couponId AND savedCoupon.is_deleted = 0", 'left');<br/>
$this->db->where("cat.categoryId", $catgoryId);<br/>
$this->db->where("cat.is_deleted", 0);<br/>
$this->db->where("coupon.is_deleted", 0);<br/>
$dt = new DateTime('now');<br/>
$dt = $dt->format('Y-m-d H:i:s');<br/>
$this->db->where('coupon.startDate <=', $dt);<br/>
$this->db->where('coupon.expiryDate >', $dt);<br/>
$this->db->limit($limit, $index);<br/>
$query = $this->db->get();

【讨论】:

  • 返回 SQL 语法错误,没有 IF 会成功运行。
猜你喜欢
  • 2014-03-23
  • 2012-02-02
  • 2018-10-15
  • 1970-01-01
  • 2021-07-25
  • 1970-01-01
  • 2016-11-06
  • 2016-02-07
  • 1970-01-01
相关资源
最近更新 更多