我有下面的查询,如果可能的话,我想尝试使其动态化,如果这是描述我遇到的这个问题的正确方式。基本上,我希望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个记录被更新时,它会抓取下一个最旧的记录并更新它们,依此类推。
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发布于 2015-01-06 10:42:52
首先,您应该学会使用故事别名和适当的join语法编写查询:
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子句的开头:
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 . . .我添加了第三个条件,因为您没有说明如何处理类别的其他值。
此外,请注意,数值常量不需要使用单引号。
https://stackoverflow.com/questions/27790074
复制相似问题