Mysql 如何在查询中执行PHP?
我有两张桌子 客户 命令 我想看看每个客户的最新订单。我使用两种不同的查询完成了此操作:Mysql 如何在查询中执行PHP?,mysql,Mysql,我有两张桌子 客户 命令 我想看看每个客户的最新订单。我使用两种不同的查询完成了此操作: $sql = "SELECT * FROM Customers"; $rslt = mysql_query($sql); WHILE( $row = mysql_fect_object($rslt)) { $sql_order = "SELECT * FROM Orders WHERE customer_id = $row->customer_id OR
$sql = "SELECT * FROM Customers";
$rslt = mysql_query($sql);
WHILE( $row = mysql_fect_object($rslt))
{
$sql_order = "SELECT * FROM Orders WHERE customer_id = $row->customer_id
ORDER BY DESC LIMIT 0,1";
................
................
}
输出是完美的,但我必须编写PHP代码
有没有什么方法可以不借助PHP代码直接输出查询结果
提前谢谢简短回答:不
数据库包含所有数据。PHP代码请求特定的数据块,然后必须将其格式化为人类可读的形式。您可以将PHP的数量保持在最低限度,但您需要它。如果您没有安装PHP,您可以直接从提示符将查询通过管道传输到mysql
echo "SELECT * FROM Customers" | mysql database_name -uusername -ppassword
[更新2011-08-11 11:30]
要在bash脚本中组合上面的两个查询:
echo "SELECT customer_id FROM Customers" | mysql database_name -uusername -ppassword | xargs -I "{}" echo "SELECT * FROM Orders WHERE customer_id = {} ORDER BY DESC LIMIT 0,1" | mysql database_name -uusername -ppassword
或者一个更可读的版本,用换行符替换管道
echo "SELECT customer_id FROM Customers"
mysql database_name -uusername -ppassword
xargs -I "{}" echo "SELECT * FROM Orders WHERE customer_id = {} ORDER BY DESC LIMIT 0,1"
mysql database_name -uusername -ppassword
如果您想在一次查询中获得每个客户的最新订单,您可以使用:
SELECT Orders.*
FROM Orders
LEFT JOIN Orders AS newer_orders ON (newer_orders.customer_id = Orders.customer_id AND newer_orders.date > Orders.date)
WHERE newer_orders.customer_id IS NULL
ORDER BY Orders.customer_id
您可能需要将.date替换为要用于对最新数据进行排序的列,在您的查询中,DESC遗漏了该顺序
查询将表与其自身的一个副本连接到具有相同客户id的较新订单的行上,然后在其中过滤掉没有较新订单的行,因此它只显示最新的行,您无需大声喊叫。Rly?非常感谢您的回复,T-SQL怎么样,T-SQL能解决这个问题吗?我可以不使用连接运行两个查询吗?哦,是的,您可以连接查询,但是您仍然需要PHP来输出结果,尽管您可以不使用循环。也许我误解了这个问题?我阅读了这个问题,有没有什么方法可以不借助PHP代码直接输出查询结果?非常感谢,你有任何查询示例来解决我的问题吗?在上面的回答中添加了几行谢谢,我可以在MYSQL查询浏览器中运行该查询吗?实际上,我正在寻找一个新的查询,它将在PHP代码的帮助下在MYSQL浏览器上运行。如果我想用相同的查询添加客户详细信息,如何?执行此查询需要花费一些时间,以便还包括客户数据:选择客户。*,订单。*来自客户的左订单使用customer\u id左订单作为新订单加入新订单。customer\u id=Orders.customer\u id和新订单。date>Orders.date,其中新订单。customer\u id为空,ORDER BY Customers.customer\u id,即使使用这种方式索引,也比运行多个查询慢得多,所以我希望你有一个订单索引。亲爱的帕根,在你发布之前我已经做了,但是你是一个明星,你节省了我的时间!