php - 从一个表中选择记录,然后从另一个表中选择一定数量的记录

标签 php mysql sql

我有两个看起来像这样的表;

   Table: pictures
  `picture_id` int(10) unsigned NOT NULL AUTO_INCREMENT,
  `picture_title` varchar(255) NOT NULL,
  `picture_description` text NOT NULL,
  `picture_src` varchar(50) NOT NULL,
  `picture_filetype` varchar(10) NOT NULL,
  `picture_width` int(11) NOT NULL,
  `picture_height` int(11) NOT NULL,
  `user_id` int(10) unsigned NOT NULL,
  `upload_date` datetime NOT NULL,

--

   Table: picture_votes
  `vote_id` int(10) unsigned NOT NULL AUTO_INCREMENT,
  `picture_id` int(10) unsigned NOT NULL,
  `vote` tinyint(4) NOT NULL,
  `user_id` int(10) unsigned NOT NULL,
  `timestamp` datetime NOT NULL,

我想要做的是从 pictures 表中选择每个字段,然后计算 picture_votes 中的所有记录,其中 pictures.picture_id = picture_votes .picture_id,例如;

picture_id => 1
picture_title => 'Pic title'
picture_description => 'Pic description'
picture_src => 'b8b3f2c3a85f1a46fbf2ee132d81f783'
picture_filetype => 'jpg'
picture_width => 612
picture_height => 612
user_id => 1
upload_date => '2013-10-12 12:00:00'
vote_count => 3 // Amount of records in `picture_votes` that has `picture_id` = 1

我想出了(其中$limit是要选择的图片数量);

SELECT pictures.*, count(picture_votes.vote) as vote_count
    FROM pictures, picture_votes
    WHERE pictures.picture_id = picture_votes.picture_id
    ORDER BY upload_date DESC
    LIMIT $limit

此操作仅选择 1 张图片以及 picture_votes所有 条记录的计数。

最佳答案

确实想要使用LEFT连接,因为这将返回所有图片,而不仅仅是投票的图片。如果您的投票超过 1,您还应该执行 sum(pv.vote) 与 COUNT() 操作(嘿,这可能会发生!试想:高级帐户 == x2 票;-)

SELECT p.*, SUM(pv.vote) votes FROM pictures p
LEFT JOIN picture_votes pv
    ON pv.picture_id=p.picture_id
GROUP BY pv.picture_id

如果您想按前 10 名投票数排序:

SELECT * FROM (
    SELECT p.*, SUM(pv.vote) votes FROM pictures p
    LEFT JOIN picture_votes pv
        ON pv.picture_id=p.picture_id
    GROUP BY pv.picture_id
) AS aggregate
ORDER BY votes DESC
LIMIT 10;

关于php - 从一个表中选择记录,然后从另一个表中选择一定数量的记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19334978/

相关文章:

MySQL 删除子查询需要数百秒,而选择查询成本要低得多

python - 如何使用 ponyorm 中的实体进行 get() 查询

MYSQL如何计算日期范围内的列的总和

mysql - 如何在mySQL中创建存储过程

javascript - 如何显示所选商品的附加值?

php - MongoDb order by 为计算值

PHP + MySQL - While 循环不

mysql - 我可以对包含各种长度字母数字值的 VARCHAR 字段实现自然排序吗?

javascript - 同时删除多条记录时,如何创建具有多个 ID 号的警报?

php - 未找到 Google_DriveFile 类 Google Drive API