我有一个查询,它从名为 的表中返回每一行posts
,我现在已将照片添加到帖子中,因此当用户上传新照片时,它将在帖子中创建一行,然后显示上传的新照片。我有这一切工作,问题是当用户删除照片时,我不希望从帖子中返回该行。
这就是我到目前为止所得到的,它仍然返回所有行。
SELECT p.* FROM posts p WHERE p.toID='$id' AND p.state='0' AND
(
(
p.type = '2' AND
p.post = ANY (SELECT ph.id FROM photos ph WHERE ph.state='0' AND ph.id=p.post)
)
OR
(
p.type!='2' //I had to add this because it wasn't returning any other posts types
//if there weren't any of the `type=2`, how could I also fix that?
)
)
ORDER BY p.id DESC LIMIT 10
所以为了知道返回该post
行需要检查的是是否ph.state
等于0,如果不等于0则意味着照片已被删除。
编辑
还有没有办法强制p.post
成为一个intval
?数据库中的列是 varchar,因为它通常存储基于文本的帖子
表结构:
CREATE TABLE `photos` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`userID` int(11) NOT NULL,
`photo` varchar(255) NOT NULL,
`description` longtext NOT NULL,
`albumID` int(11) NOT NULL,
`state` int(11) NOT NULL,
`date` int(11) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=651 ;
-- --------------------------------------------------------
CREATE TABLE `posts` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`toID` int(11) NOT NULL,
`fromID` int(11) NOT NULL,
`post` longtext NOT NULL,
`type` int(11) NOT NULL,
`state` int(11) NOT NULL,
`date` int(11) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=380 ;