我每个都有两个数据库和表。我正在读取DB1表1的renewal_date并获取当前月份的renewal_date和该记录的domain_name。
然后我尝试从DB2 table2中检索从DB1 table1中选择的domain_name的d_due_date。
然后我需要在一个表中显示domain_name,renewal_date,d_due_date。
我可以通过使用INNER JOIN加入数据库来实现这一目的。
我需要的是编写单独的选择查询和显示。
$sql = "select domain_name from table1 where MONTH(renewal_date) = '06'";
$result = mysqli_query($link_id,$sql);
if(!$result) die(sql_error());
$DoNM= Array();
$sql1= "select d_due_date from domains where d_domain IN ('abc.com','akaaasa.com')";
$result1 = mysqli_query($link_id1,$sql1);
if(!$result1) die(sql_error());
$DoNM1= Array();
echo '<table>';
while(($row1 = mysqli_fetch_array($result1,MYSQL_ASSOC))&&($row = mysqli_fetch_array($result,MYSQL_ASSOC))){
echo "<tr>";
echo "<td>" .$DoNM[]= $row['domain_name'] . "</td>";
echo "<td>" .$DoNM[]= $row['renewal_date'] . "</td>";
echo "<td>" .$DoNM1[]= $row1['d_due_date'] . "</td>";
echo "</tr>";
}
echo '</table><br />';
我在$ sql1中硬编码了域名。我想要的是从$ sql获得它。我怎么能这样做。
答案 0 :(得分:1)
所以你需要做的就是处理第一个查询结果并构建数组,然后将数组的内容转换为逗号分隔列表
$sql = "select domain_name, renewal_date
from table1
where MONTH(renewal_date) = '06'";
$result = mysqli_query($link_id,$sql);
if(!$result) die(sql_error());
$db1= Array();
$InList = '';
while( $row = mysqli_fetch_array($result,MYSQL_ASSOC) ) {
$InList .= sprintf("'%s',", $row['domain_name']);
$db1[$row['domain_name']] = $row['renewal_date'];
}
$InList = rtrim($InList, ',');
$sql = "select d_due_date, d_name
from domains
where d_domain IN ($InList)";
$result = mysqli_query($link_id1,$sql);
if(!$result) die(sql_error());
echo '<table>';
while( $row = mysqli_fetch_array($result,MYSQL_ASSOC ){
echo '<tr>';
echo '<td>' . $row['d_name'] . '</td>';
// find the db1.renewal_date matching d_name from db1 array
echo '<td>' . $db1[$row['d_name']] . "</td>";
echo '<td>' . $row['d_due_date'] . '</td>';
echo "</tr>";
}
echo '</table><br />';
所以现在我已经将db1中的数据保存到一个数组中,您可以在输出阶段使用从中获取db1.renewal_date。我还将db1.d_name添加到第二个查询中,因此您拥有包含db1.renewal_date的数组的键
当然,这不是问题。这意味着您必须存储一个数组,即$ row作为数据,这样您就可以在$db1
数组中保存完整的列集。
$sql = "select domain_name, renewal_date, f3, f4
from table1
where MONTH(renewal_date) = '06'";
$result = mysqli_query($link_id,$sql);
if(!$result) die(sql_error());
$db1= Array();
$InList = '';
while( $row = mysqli_fetch_array($result,MYSQL_ASSOC) ) {
$InList .= sprintf("'%s',", $row['domain_name']);
$db1[$row['domain_name']] = $row;
}
$InList = rtrim($InList, ',');
$db1
数组现在看起来像这样:
Array
(
[abc.com] => Array
(
[domain_name] => abc.com
[renewal_date] => 2015-06-06
[f3] => aaa
[f4] => bbb
)
[xyz.com] => Array
(
[domain_name] => xyz.com
[renewal_date] => 2015-06-07
[f3] => ccc
[f4] => ddd
)
)
因此,域名仍然是数组每次出现的KEY,但是您有另一个与该键相关联的数组,而不仅仅是一个字符串。
因此,要访问此数组,请执行此操作以使用特定于域的列。
echo '<td>' . $db1[ $row['d_name'] ] ['renewal_date'] . "</td>";
echo '<td>' . $db1[ $row['d_name'] ] ['f3'] . "</td>";
echo '<td>' . $db1[ $row['d_name'] ] ['f4'] . "</td>";
我希望这个解释得足以帮助你。
答案 1 :(得分:-1)
首先,你可以在一个包含多个表的数据库中执行此操作,这些表比使用以下内容更好,更容易使用:
SELECT domain_name,renewal_date,d_due_date
FROM table1 INNER JOIN table2
ON table2.d_name = table1.domain_name
WHERE MONTH(table1.renewal_date) = '06'";
这样的东西(也看作是referance) using where and inner join in mysql
答案 2 :(得分:-1)
我认为由于使用&amp;&amp; while循环中的运算符。可能有一个表的结果为空,这就是结果集可能为空的原因。