0

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

2 に答える 2

0

引用符なし'0'で変更した場所 0

引用符なし'2'で変更した場所 2

編集:

間隔を空けるには、そのようにします

p.type < somenumber and p.type > someothernumver

于 2013-01-07T18:01:30.973 に答える
0

これを試して:

SELECT DISTINCT p.* 
FROM posts p 
LEFT JOIN photos ph ON p.post  = ph.id AND ph.state = 0 
WHERE p.toID='$id' AND p.state = 0 AND 
        ((ph.id IS NULL AND p.type = 2) OR p.type != 2) 
ORDER BY p.id DESC 
LIMIT 10;
于 2013-01-07T18:35:39.053 に答える