[英]Select Expired Records From MySQL Tables using PHP
我想顯示所有已過期的記錄。 但這僅顯示最后一條已過期的記錄。
該代碼包含頁面。 test.php和test1.php
test.php代碼是:
<?php
include("database/db.php");
// Check connection
if($link === false){
die("ERROR: Could not connect. " . mysqli_connect_error());
}
@$result = mysqli_query($link,"select * from advertiser,company_information,advertisement,ads_date
WHERE Expiry_Date < CURDATE()");
if ($result->num_rows > 0) {
while($row = mysqli_fetch_array($result))
{
$dateid = $row['Ads_date_id'];
$name=$row['Name'];
$cnic= $row['CNIC'];
$compname = $row['Company_Name'];
$adstitle = $row['Ads_Title'];
$startdate = $row['Starting_Date'];
$expiredate = $row['Expiry_Date'];
}
}
else
{
echo '<script type="text/javascript">';
echo 'alert("No Record Found");';
echo 'window.location.href = "SingleCustomer.php";';
echo '</script>';
}
mysqli_close($link);
?>
<?php
include("test1.php");
?>
test1.php代碼是:
<html>
<head>
<title> Advertisement Information</title>
</head>
<body>
<table border="1">
<tr>
<td><?php echo $name; ?></td>
<td> <?php echo $cnic; ?></td>
<td> <?php echo $compname; ?></td>
<td> <?php echo $adstitle; ?></td>
<td> <?php echo $startdate; ?></td>
<td> <?php echo $expiredate; ?></td>
<td> <?php echo $dateid; ?> </td>
</tr>
</table>
</body>
</html>
我在MYSQl中有多個表。
1.advertiser
2.company_information
3.advertisement
4.ads_date
廣告:
CREATE TABLE `advertiser` (
`Adv_id` int(11) NOT NULL AUTO_INCREMENT,
`Name` char(20) NOT NULL,
`F_Name` char(20) NOT NULL,
`Address` varchar(40) NOT NULL,
`CNIC` int(13) NOT NULL,
`Contact` int(11) NOT NULL,
`Monthly_fee` varchar(10) NOT NULL,
`Region` varchar(10) NOT NULL,
`Reg_date` varchar(10) NOT NULL,
PRIMARY KEY (`Adv_id`)
) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=latin1;
2.Company_information:
CREATE TABLE `company_information` (
`Company_id` int(11) NOT NULL AUTO_INCREMENT,
`Company_Name` varchar(20) NOT NULL,
`Company_Contact` int(11) NOT NULL,
`Company_Address` varchar(30) NOT NULL,
PRIMARY KEY (`Company_id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
3.advertisement:
CREATE TABLE `advertisement` (
`Ads_id` int(11) NOT NULL AUTO_INCREMENT,
`Adv_id_id` int(11) NOT NULL,
`Company_id` int(11) NOT NULL,
`Ads_Title` varchar(20) NOT NULL,
`Ads_Description` varchar(40) NOT NULL,
`Ads_Image` varchar(50) NOT NULL,
PRIMARY KEY (`Ads_id`),
KEY `Adv_id` (`Adv_id_id`),
KEY `Company_id` (`Company_id`),
CONSTRAINT `Adv_id` FOREIGN KEY (`Adv_id_id`) REFERENCES `advertiser` (`Adv_id`) ON DELETE CASCADE ON UPDATE CASCADE,
CONSTRAINT `advertisement_ibfk_1` FOREIGN KEY (`Company_id`) REFERENCES `company_information` (`Company_id`) ON DELETE CASCADE ON UPDATE CASCADE
) ENGINE=InnoDB AUTO_INCREMENT=5 DEFAULT CHARSET=latin1;
4.ads_date:
CREATE TABLE `ads_date` (
`Ads_date_id` int(11) NOT NULL AUTO_INCREMENT,
`Ads_id` int(11) NOT NULL,
`Starting_Date` varchar(30) NOT NULL,
`Expiry_Date` varchar(30) NOT NULL,
PRIMARY KEY (`Ads_date_id`),
KEY `Ads_id` (`Ads_id`),
CONSTRAINT `Ads_id` FOREIGN KEY (`Ads_id`) REFERENCES `advertisement` (`Ads_id`) ON DELETE CASCADE ON UPDATE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
問題是您在while
循環中覆蓋了變量( $name
等),然后僅將它們打印一次,而不是在循環的每次迭代中都打印它們。 例如:
在test.php中:
$htmlTable = '';
while($row = mysqli_fetch_array($result)) {
$htmlTable .= '<tr><td>' . row['Ads_date_id'] .
. '</td><td>' . $row['Name']
. '</td><td>' . $row['CNIC'];
. '</td><td>' . $row['Company_Name'];
. '</td><td>' . $row['Ads_Title'];
. '</td><td>' . $row['Starting_Date'];
. '</td><td>' . $row['Expiry_Date']
. '</td></tr>';
}
然后在test1.php中:
<html>
<head>
<title> Advertisement Information</title>
</head>
<body>
<table border="1">
<?php echo $htmlTable; ?>
</table>
</body>
</html>
編輯:
第二個問題是您使用的查詢是錯誤的。 通過僅在沒有連接條件的情況下列出from
子句中的所有表,就可以執行笛卡爾連接(即,將每個表中的每個記錄與其他表中的所有其他記錄進行匹配)。 相反,您應該指定如何連接這些表,最好使用現代的顯式join
語法:
SELECT *
FROM advertisement a
JOIN company_information ci ON ci.company_id = a.company_id
JOIN advertiser ar ON ar.adv_id = a.adv_id
JOIN ads_date ad ON ad.ads_id = a.ads_id
WHERE expiry_date < CURDATE()
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.