簡體   English   中英

使用PHP從MySQL表中選擇過期記錄

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM