Mysql 需要选择标记为“的照片”;“公众”;或标记为;“给朋友”;

Mysql 需要选择标记为“的照片”;“公众”;或标记为;“给朋友”;,mysql,Mysql,我需要一些解决方案来选择标记为“公共”或标记为“朋友”的照片。我不知道这怎么可能 选择公共照片是否容易: $result = mysql_query("SELECT filename, ownerid, etc... FROM photos WHERE public='1' order by id DESC limit $start, $step") or die('Error'); 甚至是标有“给朋友”的照片 但是。。。每张照片都属于不同的所有者,在选择它们之前,查询必须知

我需要一些解决方案来选择标记为“公共”或标记为“朋友”的照片。我不知道这怎么可能

选择公共照片是否容易:

        $result = mysql_query("SELECT filename, ownerid, etc... FROM photos 
WHERE public='1' order by id DESC limit $start, $step") or die('Error');
甚至是标有“给朋友”的照片


但是。。。每张照片都属于不同的所有者,在选择它们之前,查询必须知道我是否是这张照片所有者的朋友。

我猜您有一个关系表,可以将用户链接到用户以匹配朋友关系

那么当你是一个loggued,你有一个用户id。 检查用户id是否为图片所有者的朋友。 如果是,请申请公共图片+好友图片
否则只请求公共图片。

假设您有一个将用户与其朋友映射的
friends
表,其中包含列
user\u id
friend\u user\u id
,那么您的查询应该是这样的:

SELECT * 
FROM photos p 
WHERE p.owner_id IN (SELECT friend_user_id 
                     FROM friends 
                     WHERE user_id = 1234 ) 
  AND (p.is_public = '1' OR p.for_friends = '1');

我可以根据需要制作/更改表格结构。我只是想知道怎么做。我有一个存储文件名和所有者ID的“照片”表,还有一个朋友表。是的,我有朋友表,但正如我之前所写的,每张照片都属于不同的所有者,在选择它们之前,查询必须知道我是否是这张照片所有者的朋友。我每页有30张照片,每张照片都属于不同的用户。我接受这个答案,但现在我需要找到一些解决方案,以便在没有“或”声明的情况下获得相同的结果。对不起,我没有得到你的答案?是否只是您的查询中不应该包含
?“或”运算符总是导致索引出现问题:(啊,这很棘手。那么改变你的条件:
NOT((NOT p.is_public='1')和(NOT p.for_friends='1'))
谢谢。我想我必须提出一个新问题。我忘记了一些事情。每个朋友都属于不同的朋友组。有公共照片、所有朋友的照片和特定朋友组的照片。因此,我需要这样一个查询:哪里是public='1'或'u friends='1'或'u friends='1'或'u friends='my'u friends'更复杂的是:(
SELECT * 
FROM photos p 
WHERE p.owner_id IN (SELECT friend_user_id 
                     FROM friends 
                     WHERE user_id = 1234 ) 
  AND (p.is_public = '1' OR p.for_friends = '1');