Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/61.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 如何在查询中执行PHP?_Mysql - Fatal编程技术网

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,即使使用这种方式索引,也比运行多个查询慢得多,所以我希望你有一个订单索引。亲爱的帕根,在你发布之前我已经做了,但是你是一个明星,你节省了我的时间!