仅在所有其他表数据均正确的情况下才选择一个数据

时间:2019-07-07 13:11:04

标签: php mysql wordpress phpmyadmin

我一直在为一个wordpress社交媒体网站编写此代码,您可以在其中看到异性的人,除非他们不是您的朋友(如果他们是您的朋友,他们会转到另一个页面)

在php中,我已经可以将男人与女人分开,但是现在我也想消除已经是您朋友的男人/女人

$query = "SELECT user_id FROM {$wpdb->prefix}bp_xprofile_data, WHERE field_id = 3 AND value = 'homme'";

(有了这个,我只会得到男人),现在关于他们的朋友状态的信息在另一个表中,我尝试使用WHERE EXIST来弥补它

$query = "SELECT user_id FROM {$wpdb->prefix}bp_xprofile_data, WHERE field_id = 3 AND value = 'homme' AND EXIST (SELECT id {$wpdb->prefix}bp_friends WHERE (initiator_user_id = $user_id AND is_confirmed = 1) OR (friend_user_id = $user_id AND is_confirmed = 1)) ";

但是似乎不起作用。 我只想要第一张表中的user_id,但是如果我想提取朋友状态(我不想提取,我只是希望它能证实我的其他信息以删除user_ids),则可以应用此查询

$already_friends = "SELECT is_confirmed FROM  {$wpdb->prefix}bp_friends, WHERE initiator_user_id = $user_id OR friend_user_id = $user_id";

1 个答案:

答案 0 :(得分:0)

我不知道您所引用的表的结构是什么。根据提供的信息,这可能会起作用:


SELECT user_id 
FROM {$wpdb->prefix}bp_xprofile_data 
WHERE 
   field_id = 3 AND 
   value = 'homme' AND 
   user_id NOT IN (SELECT friend_user_id 
                   FROM {$wpdb->prefix}bp_friends 
                   WHERE initiator_user_id=$user_id AND is_confirmed=1) AND
   user_id NOT IN (SELECT initiator_user_id
                   FROM {$wpdb->prefix}bp_friends 
                   WHERE friend_user_id=$user_id AND is_confirmed=1)

我应该承认这个SQL语句看起来很糟糕:它很慢并且很难阅读。如果可能,应加以改进。