Php 如何从两个表中获取最新的5家公司数据
我在mysql数据库中有2个表 a) 公司 2) 历史 此Php 如何从两个表中获取最新的5家公司数据,php,mysql,Php,Mysql,我在mysql数据库中有2个表 a) 公司 2) 历史 此视图\u id包含cid值 现在,我总是想根据历史记录表查看id将公司表中最新的5个公司名称显示为升序 为此,我正在进行以下查询。但是company\u name没有显示ASC或DESC订单 以下是查询: $getViewID3 = mysqli_query($link, "SELECT view_id, hid, is_save FROM history WHERE user_id = '$user_id' AND mark_as =
视图\u id
包含cid
值
现在,我总是想根据历史记录表查看id
将公司表中最新的5个公司名称显示为升序
为此,我正在进行以下查询。但是company\u name
没有显示ASC
或DESC
订单
以下是查询:
$getViewID3 = mysqli_query($link, "SELECT view_id, hid, is_save FROM history WHERE user_id = '$user_id' AND mark_as = 3 GROUP BY view_id ORDER BY view_date DESC LIMIT 5 ");
if(mysqli_num_rows($getViewID3) > 0 ) {
while( $fetchViewId3 = mysqli_fetch_array($getViewID3) ) {
$viewid3 = (int) $fetchViewId3['view_id'];
$hid3 = (int) $fetchViewId3['hid'];
$is_save3 = (int) $fetchViewId3['is_save'];
$getCompany = mysqli_query($link, "SELECT company_name FROM company WHERE cid = '$viewid3' ORDER BY company_name DESC");
if(mysqli_num_rows($getCompany) > 0 ) {
while ($fetchCompany2 = mysqli_fetch_array($getCompany)) {
$cName = htmlspecialchars($fetchCompany2['company_name']);
$url_link = "{$url}company.php?cid=$viewid";
if($is_save3 == 1) {
$checked = 'checked = "checked"';
} else {
$checked = '';
}
echo "<li><a onClick='window.document.location=\"$url_link\"'> $cName </a> <input type='checkbox' class='data_save' $checked data-hid='$hid' data-saveid='$viewid3' name='save_history'></li>";
}
}
}
$getViewID3=mysqli\u query($link,“选择view\u id,hid,is\u save FROM history其中user\u id='$user\u id'和mark\u as=3按视图分组\u id按视图排序\u date DESC LIMIT 5”);
如果(mysqli_num_行($getViewID3)>0{
而($fetchViewId3=mysqli\u fetch\u数组($getViewID3)){
$viewid3=(int)$fetchViewId3['view_id'];
$hid3=(int)$fetchViewId3['hid'];
$is_save3=(int)$fetchViewId3['is_save'];
$getCompany=mysqli_query($link,“从公司中选择公司名称,其中cid='$viewid3'按公司名称描述排序”);
如果(mysqli_num_行($getCompany)>0){
而($fetchCompany2=mysqli\u fetch\u数组($getCompany)){
$cName=htmlspecialchars($fetchCompany2['company_name']);
$url_link=“{$url}company.php?cid=$viewid”;
如果($is_save3==1){
$checked='checked=“checked”';
}否则{
$checked='';
}
回声“$cName ”;
}
}
}
例如:结果显示:A、E、D、R、L字母顺序。
应该显示:A、D、E、L、R字母顺序,来自公司名称栏。如果我没有误解:
SELECT
C.company_name
FROM company C
INNER JOIN
(
SELECT
view_id,
MAX(view_date) max_view_date
FROM history
WHERE is_save IN (0,1) AND mark_as = 3
GROUP BY view_id
ORDER BY max_view_date DESC
LIMIT 5
) AS t
ON C.cid = t.view_id
ORDER BY C.company_name ASC;
注意:
$getViewID3 = mysqli_query($link, "SELECT view_id, hid, is_save FROM history WHERE user_id = '$user_id' AND mark_as = 3 GROUP BY view_id ORDER BY view_date DESC LIMIT 5 ");
if(mysqli_num_rows($getViewID3) > 0 ) {
while( $fetchViewId3 = mysqli_fetch_array($getViewID3) ) {
$viewid3 = (int) $fetchViewId3['view_id'];
$hid3 = (int) $fetchViewId3['hid'];
$is_save3 = (int) $fetchViewId3['is_save'];
$getCompany = mysqli_query($link, "SELECT company_name FROM company WHERE cid = '$viewid3' ORDER BY company_name DESC");
if(mysqli_num_rows($getCompany) > 0 ) {
while ($fetchCompany2 = mysqli_fetch_array($getCompany)) {
$cName = htmlspecialchars($fetchCompany2['company_name']);
$url_link = "{$url}company.php?cid=$viewid";
if($is_save3 == 1) {
$checked = 'checked = "checked"';
} else {
$checked = '';
}
echo "<li><a onClick='window.document.location=\"$url_link\"'> $cName </a> <input type='checkbox' class='data_save' $checked data-hid='$hid' data-saveid='$viewid3' name='save_history'></li>";
}
}
}
由于您需要最新的5家公司,以下查询将在查看id
旁边放置最后的查看日期
现在,如果您根据max\u view\u date
的降序对这些行进行排序,然后将结果限制为5
,那么您将从内部查询中获得最多五个view\u id
s
稍后,此结果集和公司表之间的简单内部联接将完成此任务
很抱歉,按公司名称升序排序最终结果将完成此任务
编辑:
$getViewID3 = mysqli_query($link, "SELECT view_id, hid, is_save FROM history WHERE user_id = '$user_id' AND mark_as = 3 GROUP BY view_id ORDER BY view_date DESC LIMIT 5 ");
if(mysqli_num_rows($getViewID3) > 0 ) {
while( $fetchViewId3 = mysqli_fetch_array($getViewID3) ) {
$viewid3 = (int) $fetchViewId3['view_id'];
$hid3 = (int) $fetchViewId3['hid'];
$is_save3 = (int) $fetchViewId3['is_save'];
$getCompany = mysqli_query($link, "SELECT company_name FROM company WHERE cid = '$viewid3' ORDER BY company_name DESC");
if(mysqli_num_rows($getCompany) > 0 ) {
while ($fetchCompany2 = mysqli_fetch_array($getCompany)) {
$cName = htmlspecialchars($fetchCompany2['company_name']);
$url_link = "{$url}company.php?cid=$viewid";
if($is_save3 == 1) {
$checked = 'checked = "checked"';
} else {
$checked = '';
}
echo "<li><a onClick='window.document.location=\"$url_link\"'> $cName </a> <input type='checkbox' class='data_save' $checked data-hid='$hid' data-saveid='$viewid3' name='save_history'></li>";
}
}
}
要从历史
表中获取所有列,并从公司
表中获取公司名称
列,请执行以下操作:
SELECT
C.company_name,
t.*
FROM company C
INNER JOIN
(
SELECT
history.*
FROM history
INNER JOIN
(
SELECT
view_id,
MAX(view_date) max_view_date
FROM history
WHERE is_save IN (0,1) AND mark_as = 3
GROUP BY view_id
ORDER BY max_view_date DESC
LIMIT 5
) AS latestHistory
ON history.view_id = latestHistory.view_id AND history.view_date = latestHistory.max_view_date
) AS t
ON C.cid = t.view_id
ORDER BY C.company_name ASC;
如果我没有误解:
SELECT
C.company_name
FROM company C
INNER JOIN
(
SELECT
view_id,
MAX(view_date) max_view_date
FROM history
WHERE is_save IN (0,1) AND mark_as = 3
GROUP BY view_id
ORDER BY max_view_date DESC
LIMIT 5
) AS t
ON C.cid = t.view_id
ORDER BY C.company_name ASC;
注意:
$getViewID3 = mysqli_query($link, "SELECT view_id, hid, is_save FROM history WHERE user_id = '$user_id' AND mark_as = 3 GROUP BY view_id ORDER BY view_date DESC LIMIT 5 ");
if(mysqli_num_rows($getViewID3) > 0 ) {
while( $fetchViewId3 = mysqli_fetch_array($getViewID3) ) {
$viewid3 = (int) $fetchViewId3['view_id'];
$hid3 = (int) $fetchViewId3['hid'];
$is_save3 = (int) $fetchViewId3['is_save'];
$getCompany = mysqli_query($link, "SELECT company_name FROM company WHERE cid = '$viewid3' ORDER BY company_name DESC");
if(mysqli_num_rows($getCompany) > 0 ) {
while ($fetchCompany2 = mysqli_fetch_array($getCompany)) {
$cName = htmlspecialchars($fetchCompany2['company_name']);
$url_link = "{$url}company.php?cid=$viewid";
if($is_save3 == 1) {
$checked = 'checked = "checked"';
} else {
$checked = '';
}
echo "<li><a onClick='window.document.location=\"$url_link\"'> $cName </a> <input type='checkbox' class='data_save' $checked data-hid='$hid' data-saveid='$viewid3' name='save_history'></li>";
}
}
}
由于您需要最新的5家公司,以下查询将在查看id
旁边放置最后的查看日期
现在,如果您根据max\u view\u date
的降序对这些行进行排序,然后将结果限制为5
,那么您将从内部查询中获得最多五个view\u id
s
稍后,此结果集和公司表之间的简单内部联接将完成此任务
很抱歉,按公司名称升序排序最终结果将完成此任务
编辑:
$getViewID3 = mysqli_query($link, "SELECT view_id, hid, is_save FROM history WHERE user_id = '$user_id' AND mark_as = 3 GROUP BY view_id ORDER BY view_date DESC LIMIT 5 ");
if(mysqli_num_rows($getViewID3) > 0 ) {
while( $fetchViewId3 = mysqli_fetch_array($getViewID3) ) {
$viewid3 = (int) $fetchViewId3['view_id'];
$hid3 = (int) $fetchViewId3['hid'];
$is_save3 = (int) $fetchViewId3['is_save'];
$getCompany = mysqli_query($link, "SELECT company_name FROM company WHERE cid = '$viewid3' ORDER BY company_name DESC");
if(mysqli_num_rows($getCompany) > 0 ) {
while ($fetchCompany2 = mysqli_fetch_array($getCompany)) {
$cName = htmlspecialchars($fetchCompany2['company_name']);
$url_link = "{$url}company.php?cid=$viewid";
if($is_save3 == 1) {
$checked = 'checked = "checked"';
} else {
$checked = '';
}
echo "<li><a onClick='window.document.location=\"$url_link\"'> $cName </a> <input type='checkbox' class='data_save' $checked data-hid='$hid' data-saveid='$viewid3' name='save_history'></li>";
}
}
}
要从历史
表中获取所有列,并从公司
表中获取公司名称
列,请执行以下操作:
SELECT
C.company_name,
t.*
FROM company C
INNER JOIN
(
SELECT
history.*
FROM history
INNER JOIN
(
SELECT
view_id,
MAX(view_date) max_view_date
FROM history
WHERE is_save IN (0,1) AND mark_as = 3
GROUP BY view_id
ORDER BY max_view_date DESC
LIMIT 5
) AS latestHistory
ON history.view_id = latestHistory.view_id AND history.view_date = latestHistory.max_view_date
) AS t
ON C.cid = t.view_id
ORDER BY C.company_name ASC;
你能在你的样本数据中加入一些有区别的公司名称并包括你的预期输出吗?@1000111我正在更新…\n我已经更新了它。@草莓,你能告诉我加入查询应该是什么样子吗,因为我已经做了但没有为我工作!完成了50%。预期输出值很多词。你能加入一些有区别的公司名称吗“@1000111我正在更新…\n我已经更新了它。@草莓,你能告诉我连接查询应该是什么样子吗,因为我已经完成了,但没有为我工作过!完成了50%。预期的输出值很多词。这就是为什么我要预期的输出。顺便问一下,你想要什么列?”r预期输出列表?输出将是company\u name值,但条件是:whichis\u save
=1或0,mark\u as=3。很抱歉,我误解了。我在where子句中添加了这两个条件。请现在检查。当然。我正在检查itError:Undefined index:is\u save Int这就是我要求预期输出的原因。顺便说一下,whic您希望在预期输出列表中包含h列?输出将是公司名称值,但条件是:whichis\u save
=1或0,mark\u as=3。抱歉,我误解了。我已在where子句中添加了这两个条件。请立即检查。确定。我正在检查错误:未定义索引:is\u save in