如何查询名为 photos 的表中的所有记录,并知道当前用户使用单个查询将哪些结果照片添加为书签?
这是我的表格:
--
-- Table structure for table `photos`
--
CREATE TABLE IF NOT EXISTS `photos` (
`id` int(11) NOT NULL auto_increment,
`author` bigint(20) NOT NULL COMMENT 'The user''s Facebook ID.',
`filename` varchar(255) NOT NULL,
`thumbnail` varchar(255) NOT NULL,
`post_date` timestamp NOT NULL default CURRENT_TIMESTAMP,
`description` varchar(140) NOT NULL,
`finalist` tinyint(4) NOT NULL DEFAULT '0',
CONSTRAINT user_must_exist FOREIGN KEY (author)
REFERENCES users(facebook_id)
ON DELETE CASCADE,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=1 ;
-- --------------------------------------------------------
--
-- Table structure for table `bookmarks`
--
CREATE TABLE IF NOT EXISTS `bookmarks` (
`facebook_id` bigint(20) NOT NULL COMMENT 'The author''s Facebook ID.',
`photo_id` int(11) NOT NULL,
CONSTRAINT photo_should_exist FOREIGN KEY (photo_id)
REFERENCES photos(id)
ON DELETE CASCADE,
CONSTRAINT user_should_exist FOREIGN KEY (facebook_id)
REFERENCES users(facebook_id)
ON DELETE CASCADE,
UNIQUE KEY `no_duplicates` (`facebook_id`,`photo_id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1 COMMENT='The user''s favourite photos.';
我想这个查询会类似于以下内容:
SELECT
photos.*,
bookmarks.photo_id AS bookmark
FROM photos
LEFT JOIN bookmarks
ON bookmarks.photo_id = photos.id
AND photos.author = 123456789
但是这不起作用,我收到以下 MySQL 错误:
Unknown column 'photos.id' in 'on clause'
在 Barmar 指出的一个小拼写错误修复后,keyur 的代码对我有用。
SELECT photos . * , bookmarks.photo_id AS bookmark
FROM photos
LEFT JOIN bookmarks ON photos.id = bookmarks.photo_id
AND bookmarks.facebook_id = 123456789
Cảm ơn.
已编辑错字。
已编辑第二个拼写错误。
Đây là SQL Fiddle 上的示例工作代码。正如评论中所指出的,您的 bookmarks
表上没有 bookmarks.id
列,并且 photo.id
确实存在于 照片
表。再次检查您收到的错误,因为似乎有些东西不正确。
Tôi là một lập trình viên xuất sắc, rất giỏi!