我有 2 个 sql 查询,第一个根据 AREA 和 CATEGORY 从数据库中选择产品
它是一家家具店,此查询是针对餐桌的。
SELECT p.id,
p.product_name,
p.range_name,
p.pic_url,
p.hits,
p.manufacturer,
p.standard_price,
p.sale_price,
p.offer_price,
p.discount,
p.display_manufacturer,
p.display_price,
p.visible,
p.display_model_results,
p.model,
p.subcat,
p.disable_options,
p.request_price,
p.corner_flag,
cf.flag_name,
cf.flag_url,
cf.flag_description,
p.display_model,
p.offer_status,
p.disable_options_results,
p.added_timestamp,
p.about,
p.keywords
FROM products p,
corner_flags cf
WHERE ( p.area = 'Dining Room Furniture'
OR p.additionarea = 'Dining Room Furniture' )
AND ( p.subcat = 'Dining Tables'
OR p.additionsubcat = 'Dining Tables' )
AND p.sale_price = ''
AND p.visible = '1'
AND p.corner_flag = cf.flag_id
AND ( p.sale_price = ''
OR p.offer_price = '0' )
AND p.visible = '1'
ORDER BY ( p.hits ) DESC
每次查看产品时,产品表中的“命中”字段都会增加 1。起初这还可以,但现在如果客户决定按受欢迎程度排序结果,新产品总是位于列表的底部。
我们有另一个表来跟踪我们网站上的每次点击,所以我写了一个查询来计算特定产品在过去 2 周内被查看的次数。
SELECT Count(*) AS total,
vtp.product_id
FROM visitor_tracking_pages vtp,
products p
WHERE vtp.product_id = p.id
AND p.subcat = 'Dining Tables'
AND p.visible = '1'
AND vtp.last_click >= '1380153600'
GROUP BY vtp.product_id
ORDER BY total DESC
此查询提供产品 ID 和过去 2 周内收到的总点击量。
我只需要一种方法将这两个查询合并为一个。显然,并非所有产品都会在过去 2 周内被查看,所以如果这有什么不同,我需要一种返回 0 的方法吗?
我查看了各种 JOINS,但我不熟悉如何编写它们。
非常感谢您的任何帮助!