簡體   English   中英

如何使用 mysql 在 php 中顯示每家餐廳的評論?

[英]How to show reviews per restaurant in php with mysql?

我試圖顯示每家餐廳的評論數量。

我制作了 2 個包含我的數據的表格。

CREATE TABLE `restaurants` (
  `id` int(4) NOT NULL AUTO_INCREMENT,
  `name` varchar(200) NOT NULL,
  `city` varchar(200) NOT NULL,
  `country` varchar(200) NOT NULL,
  `score` int(1) NOT NULL DEFAULT '0',
  `reviews` int(1) NOT NULL DEFAULT '0',
  `slug` varchar(200) NOT NULL DEFAULT 'slug-test',
  `approved` int(1) NOT NULL DEFAULT '0',
  `description` text NOT NULL,
  `review` int(11) DEFAULT '0',
  `created_date` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
  `updated_date` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00',
  `img_url` varchar(255) NOT NULL,
  `category` varchar(255) NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=65 DEFAULT CHARSET=latin1
CREATE TABLE `reviews` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `restaurant_id` int(11) NOT NULL,
  `review_text` text NOT NULL,
  `score` int(11) NOT NULL,
  PRIMARY KEY (`id`),
  KEY `restaurant_id` (`restaurant_id`),
  CONSTRAINT `reviews_ibfk_1` FOREIGN KEY (`restaurant_id`) REFERENCES `restaurants` (`id`) ON DELETE NO ACTION ON UPDATE NO ACTION
) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=latin1

我已經在列表中顯示了我的餐廳。

$query = "SELECT * FROM restaurants WHERE approved = 1 ORDER BY created_date DESC";
$result = $mysqli->query($query);

while($row = $result->fetch_array()) {
**HTML WITH MY VARIABLES**
}

這就是你目前顯示我的評論的方式(我的餐廳表中的硬編碼結果。

if ($reviews <= "0") {
echo "<a href='#' title='Write reviews'><p class='purple-def-color fz-12 mb-0'>write a review</p></a>";
} else if ($reviews > "1") {
echo "<p class='purple-def-color mb-0'>". $row['reviews'] ." reviews</p>";
} else {
echo "<p class='purple-def-color mb-0'>" . $row['reviews'] . " review</p>";
}

我嘗試使用 JOIN 查詢,但沒有成功以任何方式顯示評論數量。

嘗試左連接:

$query = 'SELECT * FROM restaurants LEFT JOIN reviews on reviews.restaurant_id = restaurants.id'

左連接返回左表(餐館)中的所有記錄,以及右表(評論)中的匹配記錄

根據您的表結構,您可以通過加入reviews表、選擇評論的 COUNT 條並按餐廳 ID 分組來獲取每家餐廳的評論計數。

按餐廳分組可讓您獲得每個餐廳的已加入評論記錄的聚合(例如count )。

SELECT
    rs.*,
    COUNT(rv.`id`) as `reviewCount`
FROM `restaurants` rs
LEFT JOIN `reviews` rv
    ON (rv.`restaurant_id` = rs.`id`)
WHERE rs.`approved` = 1
GROUP BY rs.`id`
ORDER BY rs.`created_date` DESC;

然后,當您獲取 PHP 中的行時,您可以引用每一行的評論計數:

echo $row['reviewCount'];

為了進一步演示聚合函數,這里有一個示例,說明如何 select 每個餐廳的平均最低最高評論分數:

SELECT
    rs.*,
    COUNT(rv.`id`) as `reviewCount`,
    AVG(rv.`score`) as `reviewAverageScore`,
    MIN(rv.`score`) as `reviewMinScore`,
    MAX(rv.`score`) as `reviewMaxScore`
FROM `restaurants` rs
LEFT JOIN `reviews` rv
    ON (rv.`restaurant_id` = rs.`id`)
WHERE rs.`approved` = 1
GROUP BY rs.`id`
ORDER BY rs.`created_date` DESC;

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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