我正在构建一个类似于 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/