2015-09-28 101 views
0

之间的比较值,我已搜查了个遍,但仍然不能写实际工作正确的查询! :|做查询的另一个查询,如果另一个查询不存在返回0和2的查询

我写这篇文章之一,它似乎确定,但它是这么想的工作......

select 
    s.surf_id, 
    s.surf_dailyuser, 
    s.surf_url, 
    s.surf_cpc, 
    (if exists(
    select surfed_count from `surfed` where s.surf_id = surfed_site and surfed_date = 'today' 
) then select surfed_count as surfedcount; 
    else select 0 as surfedcount; end if 
) 
    from `surfs` s where s.surf_status = 1 and surfedcount < s.surf_dailyuser order by s.surf_rand limit 1 

任何建议将是一个很大的帮助:)

表都是这样

次区域资源中心

CREATE TABLE IF NOT EXISTS `surfs` (
    `surf_id` int(11) NOT NULL, 
    `surf_user` int(11) NOT NULL, 
    `surf_title` varchar(128) CHARACTER SET latin1 NOT NULL, 
    `surf_url` varchar(500) CHARACTER SET latin1 NOT NULL, 
    `surf_dailyuser` int(11) NOT NULL, 
    `surf_cpc` int(11) NOT NULL, 
    `surf_status` int(11) NOT NULL, 
    `surf_date` varchar(32) NOT NULL, 
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8; 

冲浪

CREATE TABLE IF NOT EXISTS `surfed` (
    `surfed_id` int(11) NOT NULL, 
    `surfed_code` int(11) NOT NULL, 
    `surfed_user` int(11) NOT NULL, 
    `surfed_site` int(11) NOT NULL, 
    `surfed_count` int(11) NOT NULL, 
    `surfed_date` int(11) NOT NULL 
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=latin1; 

回答

0

您可以使用CASE语句如下

select 
    s.surf_id, 
    s.surf_dailyuser, 
    s.surf_url, 
    s.surf_cpc, 
    CASE WHEN 
    (select surfed_count from `surfed` where s.surf_id = surfed_site and surfed_date = 'today') = 1 then (select surfed_count as surfedcount) 

    ELSE 0 END AS surfedcount 
    from `surfs` s where s.surf_status = 1 and surfedcount < s.surf_dailyuser order by s.surf_rand limit 1 
+0

感谢了很多回应,但我面对这个错误:“参考‘surfedcount’不支持(在项目列表中向前引用)” ...当我改变这部分“...然后(选择surfed_count as surfedcount)...”到“...然后(选择surfed_count)...”,我面对这个错误:“未知列'surfed_count'在'字段列表'...',但surfed_count clumn exsists!我甚至尝试使用THEN后重新选择surfed_count,但它不工作太... – wearyminded

+0

请给你的SQL。 – Tharanga

+0

我编辑问题并添加表格结构:) – wearyminded

相关问题