php - 优化 PHP 的数据库查询

标签 php mysql sql pdo

我正在构建一个类似于 Pinterest 风格的网站,目前处于开发的早期阶段。

我可以毫无问题地做到这一点,但我想知道这是否是最好的方法。

目标:

从数据库中提取所有图像数据,然后针对每个图像从“收藏夹”表中提取数据,统计照片的收藏夹数量,然后,如果存在事件用户 session ,则判断该用户是否标记为收藏夹。

问题

该网站默认显示 54 张照片,然后,对于这 54 张照片,程序必须查找每张照片的最爱。 这代表了对服务器和数据库的许多请求,我认为它的形式是:

$images = 'SELECT * FROM IMAGES photo_id ORDER BY LIMIT 54';

foreach ( $images as $image ) {
   $lookFavorite = 'SELECT * FROM favorites WHERE photo_id ='. $ image ['photo_id'] ';
}

数据库表结构

照片

photo_id    INT (auto increment)
user_nick   VARCHAR (25)
photo_path  VARCHAR (255)
photo_title VARCHAR (150)
photo_theme VARCHAR (60)
date        TIMESTAMP

收藏夹

photo_id  INT
user_nick VARCHAR (25)
date      TIMESTAMP

重要

PHP version 5.3, using MySQL.
The program I'm building is object oriented [I'm using PDO'].

最佳答案

您应该使用从图像到收藏夹的左连接,然后根据需要使用 GROUP BY 来获取计数,以防存在有 0 个收藏夹的图像。

SELECT * 
FROM `images` 
LEFT JOIN `favorites` ON `images`.`photo_id`=`favotites`.`photo_id`

关于php - 优化 PHP 的数据库查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15348076/

相关文章:

php - MySQL 多重排序(嵌套)

php - 如何在php中搜索mysql数据库中的字符串

MySQL - 表中的重复行具有由 JOIN 确定的不同列值

sql - 我可以通过在列 x 上创建索引来优化 SELECT DISTINCT x FROM hugeTable 查询吗?

sql - 索引 ORDER BY 与 LIMIT 1

php - Laravel 如何运行作为数组值并传递给 View 的 Eloquent 查询?

php - MySQL - 在选择中使用数组

php - 如何将 Dreamweaver 连接到 1and1 上的 MySQL 数据库?

sql - MySQL多表问题

sql - 如何对四个表使用内连接查询