将3个MYSQL查询优化为一个

时间:2018-01-06 08:58:52

标签: php mysql sql inner-join

我的页面每天有超过30个视图,我无法缓存页面(数据必须始终是最新的)。

我有三个MYSQL查询,我想总结一下。 这可能吗?

SELECT * 
FROM  `meta_holdings` 
INNER JOIN coins ON coins.cmc_id = meta_holdings.cmc_id
WHERE  `userId` = $userId
LIMIT 0 , 999

SELECT * 
FROM  `meta_watchlist` 
INNER JOIN coins ON coins.cmc_id = meta_watchlist.cmc_id
WHERE  `userId` = $userId
LIMIT 0 , 999

SELECT * 
FROM  `coins` 
ORDER BY  `coins`.`rank` ASC 
LIMIT 0 , 30

很高兴得到任何帮助

3 个答案:

答案 0 :(得分:1)

单个查询返回单个数据集。通过查看三个查询,您看起来需要三个数据集。通过查询查询,您无法实现相同的功能。所以它的外观应该没问题,除非你改变了你的要求。或者,您可以查看MySQL的内部缓存。

答案 1 :(得分:0)

//试试这个..

SELECT * FROM  `meta_holdings` INNER JOIN coins ON coins.cmc_id = meta_holdings.cmc_id WHERE  `userId` = $userId LIMIT 0 , 999 
UNION
SELECT * FROM  `meta_watchlist` INNER JOIN coins ON coins.cmc_id = meta_watchlist.cmc_id WHERE  `userId` = $userId LIMIT 0 , 999
UNION
SELECT * FROM  `coins` ORDER BY  `coins`.`rank` ASC LIMIT 0 , 30

答案 2 :(得分:0)

如果您要查找硬币表格数据的前30名排名以及meta_holdings,meta_watchlist详细信息,请点击此处查询

SELECT * FROM  coins 
INNER JOIN meta_holdings ON coins.cmc_id = meta_holdings.cmc_id
INNER JOIN meta_watchlist ON coins.cmc_id = meta_watchlist.cmc_id
WHERE  meta_holdings.userId = $userId and meta_watchlist.userId = $userId
ORDER BY  `coins`.`rank` ASC 
LIMIT 0 , 30