如果一行匹配过滤器,则从数据库获取所有行

时间:2016-07-27 07:00:40

标签: mysql sql

我正在创建一个Web服务,该服务将有关产品的信息发送给用户,但前提是信息已更新。因此,例如,我有一个包含翻译的表格,我想获得此产品的所有翻译,但前提是这些翻译中的一个updated_at行高于特定时间戳。这可以在一个查询中实现吗?

这是我在此示例中的翻译表:

+---------------+
| Translations  |
+---------------+
| product_id    |
| slug          |
| value         |
| language_code |
| created_at    |
| updated_at    |
+---------------+

SELECT * FROM Translations WHERE product_id IN (1, 2, ...);

目前我总是加载所有产品的翻译并使用PHP代码过滤掉它们。但是,这对我的服务器造成了很大的负担,我想减少它 我总是希望在更新产品时发送产品的所有翻译,以便最终用户知道它可以删除所有现有翻译并添加这些翻译。

感谢您的帮助。

1 个答案:

答案 0 :(得分:1)

有一个子查询,它返回具有比特定时间戳更晚的updated_at值的产品的product_id。 Join结果可以获得这些产品的所有行。

select t1.*
from tablename t1
join (select distinct product_id
      from tablename
      where updated_at > :that_timestamp) t2
  on t1.product_id = t2.product_id