SQL 连接或 PHP 循环?要不然是什么?
Posted
技术标签:
【中文标题】SQL 连接或 PHP 循环?要不然是什么?【英文标题】:SQL join or PHP loop? or what?SQL 连接或 PHP 循环?要不然是啥? 【发布时间】:2013-02-16 16:36:54 【问题描述】:所以我有两个查询给我我需要的信息,我试图找出从他们那里得到结果的最佳方法。我有一个控股表。使用:
SELECT symbol, sum(shares) AS shares, sum(shares * price) AS cost
FROM Transactions
WHERE (action <>5)
AND date <= '2010-10-30'
GROUP BY symbol HAVING sum(shares) > 0
导致
AGNC 50.00 1390.0000
RSO 1517.00 9981.8600
T 265.00 6668.7500
然后我有另一个问题
SELECT close FROM History WHERE symbol = $symbol AND date = $date
这将返回当天的收盘价。
T 24.40
我想基本上为给定的日期计算值,因此每个符号的总和(股数 * 关闭)。但我不知道如何在 php 中循环遍历每一行。我希望有一个连接或我可以在 sql 中执行的操作以使数据以我想要的方式返回
【问题讨论】:
仅供参考,您可以使用数字来比较日期值date
@popnoodles - 但由于很多人使用日期作为列名,它是少数实际上不需要反引号的保留字之一
这是真的马克还是你在拉我的腿?
我使用它没有反引号
【参考方案1】:
我认为您可以执行类似的操作:A select query selecting a select statement 将您的第二个查询按字面意思放在第一个查询中。不确定确切的语法,但喜欢:
SELECT
symbol,
sum(shares) AS shares,
sum(shares * price) AS cost,
sum(shares * close) as value
FROM Transactions
INNER JOIN History ON (symbol = $symbol AND date = $date)
WHERE (action <>5)
AND date <= '2010-10-30'
GROUP BY symbol HAVING sum(shares) > 0
@popnoodles 对你的命名是正确的。如果您使用日期,我认为您需要 [日期]。
【讨论】:
在其中使用另一个选择查询的问题在于它只给了我一个符号。正如您在第一个查询示例中看到的那样,我有多个符号。我希望可能会加入某种我可以做的事情。其他明智的病只需要在php中做一个循环 好吧,我认为您可以执行类似INNER JOIN History ON (symbol = $symbol AND date = $date)
的操作,然后将其添加到您的选择列表并在那里使用它。我认为这会奏效。我不确定你是否可以这样做,但我认为你可以。
INNER JOIN History ON (History.symbol = Transactions.symbol AND History.date = Transactions.date)
?
这就是我得到我想要的数据的方式SELECT Transactions.symbol, sum(shares) AS shares, sum(shares * price) AS cost, History.close as close, (shares * History.close) as value FROM Transactions INNER JOIN History ON (History.symbol = Transactions.symbol AND History.date ='2013-02-08') WHERE (action <>5) AND Transactions.date <= '2013-02-08' GROUP BY Transactions.symbol HAVING sum(shares) > 0
以上是关于SQL 连接或 PHP 循环?要不然是什么?的主要内容,如果未能解决你的问题,请参考以下文章
php 如何输出DB类上所有SQL语句,页面上的所有 有关mysql 连接,语句 等信息
SQL Server 2008 中嵌套循环连接和哈希连接的区别