というテーブルから各行を返すクエリがあります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 ;