我的SQL查询有问题。我正在尝试查询数据库以从3个不同的表中获取数据,其中应用了一个表条件。 在第二个条目上,它正确显示结果,但在第一个条目上缺少显示应用条件的表的结果。
这是我的疑问:
SELECT
`".PRODUCTS."`.*,
`".CATEGORIES."`.*,
`q_prices`.*
FROM
`".PRODUCTS."`
LEFT JOIN
`".CATEGORIES."`
ON
`".PRODUCTS."`.`category_id` = `".CATEGORIES."`.`category_id`
INNER JOIN(
SELECT
`".PRICES."`.*
MAX(`".PRICES."`.`price_modified`) modified
FROM
`".PRICES."`
GROUP BY
`".PRICES."`.`product_id`
) `q_prices`
ON
`".PRODUCTS."`.`product_id` = `q_prices`.`product_id`
这就是它的回报:
Array
(
[0] => stdClass Object
(
[product_id] => 1
[product_name] => Test product
[product_alias] => test-product
[category_id] => 1
[product_created] => 2013-07-29 11:36:51
[product_modified] => 2013-07-29 11:36:51
[category_name] => Test categorie
[category_alias] => test-categorie
[category_parent] => wonenplaza.nl
[category_created] => 2013-07-29 11:39:29
[category_modified] => 2013-07-29 11:39:29
[price_id] => 1
[price_amount] => 25.00
[price_tax] => 21
[price_created] => 2013-07-29 11:38:18
[price_modified] => 2013-07-29 11:38:18
[modified] => 2013-07-29 11:38:52
)
[1] => stdClass Object
(
[product_id] => 2
[product_name] => Priva Blue ID
[product_alias] => test-product2
[category_id] => 1
[product_created] => 2013-07-29 12:18:54
[product_modified] => 2013-07-29 12:18:54
[category_name] => Test categorie
[category_alias] => test-categorie
[category_parent] => wonenplaza.nl
[category_created] => 2013-07-29 11:39:29
[category_modified] => 2013-07-29 11:39:29
[price_id] => 4
[price_amount] => 20.00
[price_tax] => 21
[price_created] => 2013-07-29 12:19:11
[price_modified] => 2013-07-29 12:19:11
[modified] => 2013-07-29 13:30:05
)
)
我认为它与LEFT JOIN查询中指定的限制有关,但我不确定。我不知道如何查询数据库以获得这些结果。
提前致谢(:
答案 0 :(得分:0)
这是如何获取与最新值相关联的其他数据。
select f1, f2, etc
from sometables
join (
select f1, max(datefield) maxdt
from table1
where whatever
group by f1
) temp on table1.datefield = maxdt
and table1.f1 = temp.f1
etc
将这个原则应用到你的桌子上,你很高兴。顺便说一下,你想要一个内连接,而不是左派连接到派生表。
答案 1 :(得分:0)
您的子查询会查找所有价格中的最新价格,无论产品是什么,都不是您所需要的。修复它并非易事,但您可以将嵌套查询重写为LEFT JOIN
,这似乎可以简化事情; (抱歉,您的表稍微重命名以使SQLfiddle满意)
SELECT `.PRODUCTS.`.*, `.CATEGORIES.`.*, `q_prices`.*
FROM `.PRODUCTS.`
LEFT JOIN `.CATEGORIES.`
ON `.PRODUCTS.`.`category_id` = `.CATEGORIES.`.`category_id`
LEFT JOIN `.PRICES.` `q_prices`
ON `q_prices`.`product_id` = `.PRODUCTS.`.`product_id`
LEFT JOIN `.PRICES.` `dummy`
ON `dummy`.`product_id` = `.PRODUCTS.`.`product_id`
AND `q_prices`.`price_modified` < `dummy`.`price_modified`
WHERE `dummy`.`price_modified` IS NULL;