Php 将两个不同的查询合并为一个合并的foreach
我会尽力解释的。我有两个查询从MySQL中提取数据,一个从公园评论中提取数据,另一个从骑乘评论中提取数据。这两个查询都按查看日期排序 我在网页上想要的是一个按Php 将两个不同的查询合并为一个合并的foreach,php,mysql,foreach,Php,Mysql,Foreach,我会尽力解释的。我有两个查询从MySQL中提取数据,一个从公园评论中提取数据,另一个从骑乘评论中提取数据。这两个查询都按查看日期排序 我在网页上想要的是一个按审核日期排序的审核列表,因此停车审核和乘车审核将混合在一个列表中 几乎就像运行两个foreach循环,每个查询一个循环,但根据日期轮流执行 以下是两个问题: 乘车 $query4= 'SELECT review_id, review, tpf_reviews_rides.user, DATE_FORMAT(date_ridden, "%d
审核日期排序的审核列表,因此停车审核和乘车审核将混合在一个列表中
几乎就像运行两个foreach循环,每个查询一个循环,但根据日期轮流执行
以下是两个问题:
乘车
$query4= 'SELECT review_id, review, tpf_reviews_rides.user, DATE_FORMAT(date_ridden, "%d %M %Y") AS Date_Ridden, DATE_FORMAT(review_date, "%d %M %Y") AS Review_Date, tpf_rides.name AS ride_name, rating, tpf_parks.name AS park_name, country
FROM tpf_reviews_rides
INNER JOIN tpf_rides ON tpf_reviews_rides.ride_id = tpf_rides.ride_id
INNER JOIN tpf_ratings_rides ON tpf_reviews_rides.rating_link = tpf_ratings_rides.rating_id
INNER JOIN tpf_parks ON tpf_reviews_rides.park_id = tpf_parks.park_id
ORDER BY review_date DESC, review_id DESC LIMIT '.$start_from.' , '.$limit.'';
公园:
$query5= 'SELECT review_id, review, tpf_reviews_parks.user, DATE_FORMAT(date_visited, "%d %M %Y") AS Date_Visited, DATE_FORMAT(review_date, "%d %M %Y") AS Review_Date, rating, tpf_parks.name, country
FROM tpf_reviews_parks
INNER JOIN tpf_ratings_parks ON tpf_reviews_parks.rating_link = tpf_ratings_parks.rating_id
INNER JOIN tpf_parks ON tpf_reviews_parks.park_id = tpf_parks.park_id
ORDER BY review_date DESC, review_id DESC LIMIT '.$start_from.' , '.$limit.'';
这就是我分别显示结果的方式:
乘车:
foreach ($res4 AS $row4) {
printf('
<h2 style="display:inline;">%s</h2> <h3 style="display:inline;">- %s, %s</h3>
<h3>Rating - %sStars</h3>
<h4>Submitted by %s on %s</h4>
<p>%s</p>' . PHP_EOL, $row4['ride_name'], $row4['park_name'], $row4['country'], $row4['rating'], (htmlspecialchars($row4['user'], ENT_QUOTES, 'UTF-8')), $row4['Review_Date'], nl2br(htmlspecialchars($row4['review'], ENT_QUOTES, 'UTF-8')));
if(!empty($row4['Date_Ridden'])){
printf('<p>Date ridden: %s</p>' . PHP_EOL, $row4['Date_Ridden']);
}
printf('<a class="bloglink" href="#top">Back to Top</a>
<hr>');
}
For PArks:
foreach ($res5 AS $row5) {
printf('
<h2 style="display:inline;">%s</h2> <h3 style="display:inline;">- %s</h3>
<h3>Rating - %sStars</h3>
<h4>Submitted by %s on %s</h4>
<p>%s</p>' . PHP_EOL, $row5['name'], $row5['country'], $row5['rating'], (htmlspecialchars($row5['user'], ENT_QUOTES, 'UTF-8')), $row5['Review_Date'], nl2br(htmlspecialchars($row5['review'], ENT_QUOTES, 'UTF-8')));
if(!empty($row4['Date_Ridden'])){
printf('<p>Date Visited: %s</p>' . PHP_EOL, $row4['Date_Visited']);
}
printf('<a class="bloglink" href="#top">Back to Top</a>
<hr>');
}
foreach($res4作为$row4){
printf('
%s-%s,%s
评级-%sStars
由%s在%s上提交
%s'.PHP_EOL、$row4['ride_name']、$row4['park_name']、$row4['country']、$row4['rating']、(htmlspecialchars($row4['user'],ENT_QUOTES,'UTF-8')、$row4['Review_Date',nl2br(htmlspecialchars($row4['Review'],ENT_QUOTES,'UTF-8'));
如果(!空($row4['Date\u riden'])){
printf(“Date-rided:%s”.PHP_-EOL,$row4['Date_-rided']);
}
printf('
”);
}
公园:
foreach($res5作为$row5){
printf('
%s-%s
评级-%sStars
由%s在%s上提交
%s“.PHP_EOL,$row5['name'],$row5['country'],$row5['rating'],(htmlspecialchars($row5['user',entu QUOTES,'UTF-8')),$row5['Review_Date',nl2br(htmlspecialchars($row5['Review',entu QUOTES,'UTF-8'));
如果(!空($row4['Date\u riden'])){
printf(“访问日期:%s”.PHP_EOL,$row4[“访问日期]);
}
printf('
”);
}
为了使它更复杂,这一页是分页的。看看它,因为这两个查询非常相似,如果有一种方法可以在查询级别进行组合,那么这将是最好的,并且有助于保持分页代码的得体性。有人对我如何做到这一点有什么建议吗
谢谢您可以使用合并两个select语句
请注意,如果表非常相似,则最好合并它们(不是在查询中,而是在实际表中)。我没有看到与tpf\u reviews\u parks
相比,您的tpf\u reviews\u骑行中有任何字段不完全相同。添加一列表示审核类型(骑乘或停车),您应该进行设置。它将简化查询和处理逻辑
SELECT
type,
review_id,
review,
user,
Date_Event,
Review_Date,
ride_name,
rating,
park_name,
country
FROM (
SELECT
'ride' as type,
review_id,
review,
tpf_reviews_rides.user,
DATE_FORMAT(date_ridden, "%d %M %Y") AS Date_Event,
DATE_FORMAT(review_date, "%d %M %Y") AS Review_Date,
tpf_rides.name AS ride_name,
rating,
tpf_parks.name AS park_name,
country
FROM
tpf_reviews_rides
INNER JOIN tpf_rides ON tpf_reviews_rides.ride_id = tpf_rides.ride_id
INNER JOIN tpf_ratings_rides ON tpf_reviews_rides.rating_link = tpf_ratings_rides.rating_id
INNER JOIN tpf_parks ON tpf_reviews_rides.park_id = tpf_parks.park_id
UNION
SELECT
'park' as type,
review_id,
review,
tpf_reviews_parks.user,
DATE_FORMAT(date_visited, "%d %M %Y") AS Date_Event,
DATE_FORMAT(review_date, "%d %M %Y") AS Review_Date,
NULL as ride_name,
rating,
tpf_parks.name AS park_name,
country
FROM
tpf_reviews_parks
INNER JOIN tpf_ratings_parks ON tpf_reviews_parks.rating_link = tpf_ratings_parks.rating_id
INNER JOIN tpf_parks ON tpf_reviews_parks.park_id = tpf_parks.park_id
) AS reviews
ORDER BY
review_date DESC,
review_id DESC
LIMIT ' . $start_from . ', ' . $limit;
我想在阅读了你的答案并进一步研究之后,我认为你是对的,我将合并这两个表格。谢谢