首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >对动态结果使用单个MySQL查询

对动态结果使用单个MySQL查询
EN

Stack Overflow用户
提问于 2015-01-06 08:07:27
回答 1查看 19关注 0票数 0

我有下面的查询,如果可能的话,我想尝试使其动态化,如果这是描述我遇到的这个问题的正确方式。基本上,我希望products_play.sell > 'XX‘根据products_play.category_id的不同而改变。

因此,如果category_id是101或102,我想要products_play.sell > '1.50',如果category_id是201或202,我想要products_play.sell > '1.00‘

因此,我可以根据category_id设置products_play.sell过滤器。我不介意数组$filter'101‘= "1.50";$filter'201’= "1.00";

数据库中的所有记录都有一个时间戳,当一批10个记录被更新时,它会抓取下一个最旧的记录并更新它们,依此类推。

代码语言:javascript
复制
SELECT
                products_amazon.asin AS asin
            FROM
                products_amazon, products_play
            WHERE
                products_play.sell > '1.50' AND
                products_amazon.ean_crumb = products_play.ean AND
                products_play.category_id IN (101,102,103,201,202,203,303,404) AND
                products_amazon.asin NOT IN ('','X') AND
                products_amazon.asin NOT LIKE '%:%' AND
                products_amazon.timestamp < UNIX_TIMESTAMP(DATE_SUB(NOW(), INTERVAL 60 MINUTE))
            LIMIT 10
EN

回答 1

Stack Overflow用户

发布于 2015-01-06 10:42:52

首先,您应该学会使用故事别名和适当的join语法编写查询:

代码语言:javascript
复制
SELECT a.asin AS asin
FROM products_amazon a JOIN
     products_play p
     ON a.ean_crumb = p.ean
WHERE p.sell > 1.50 AND
      p.category_id IN (101,102,103,201,202,203,303,404) AND
      a.asin NOT IN ('','X') AND
      a.asin NOT LIKE '%:%' AND
      a.timestamp < UNIX_TIMESTAMP(DATE_SUB(NOW(), INTERVAL 60 MINUTE))
LIMIT 10;

然后你就可以用基本的布尔逻辑做你想做的事情了。下面是where子句的开头:

代码语言:javascript
复制
WHERE ((p.category_id in (101, 102) and p.sell > 1.50) OR
       (p.category_id in (201, 202) and p.sell > 1.00) OR
       p.sell > 1.50
      ) AND  . . .

我添加了第三个条件,因为您没有说明如何处理类别的其他值。

此外,请注意,数值常量不需要使用单引号。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/27790074

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档