SQL:从表1中选择行并存在(表2中的行)

时间:2014-02-10 11:03:58

标签: php mysql select exists

我正在尝试选择行并在此选择中添加一个布尔值来测试另一个表中记录的多对多关系的存在。

这是我的代码:

$q = $this->dao->prepare('
        SELECT wishlists.id, wishlists.title, wishlists.comment, wishlists.date, users.name, users.username
        FROM wishlists
            LEFT JOIN users ON wishlists.user = users.id
            WHERE users.username = :username
        ORDER BY wishlists.date DESC
        ');

    $q->bindValue(':username', $user);

    $q->execute();

这将返回包含所有字段的表格。我想用这种子查询在这个表中添加一列:

SELECT EXISTS(SELECT 1 FROM wishlists_following WHERE wishlist_id = wishlists.id AND user_id = :current_user_id)

其中current_user_id是访问者的ID,$ user是当前用户个人资料页面。

最好的方法是什么?

目标是获取有关心愿单的所有信息,并了解当前用户是否正在关注此愿望清单(为了显示以下按钮,或者不显示所返回的每个心愿单)。

2 个答案:

答案 0 :(得分:0)

当你在心愿单和用户之间使用LEFT JOIN时,如果没有愿望清单的相关用户,你将获得列用户名和用户的NULL值。

所以我认为你不需要另一个查询:一旦你得到第一个查询的结果,你只需要测试列users.name的无效。

答案 1 :(得分:0)

检查第一个查询中的名称或用户名字段 - 在执行查询后直接查询或在脚本中查询,如果为空则表示用户未遵循心愿单,否则他/她执行查询。 关键是使用LEFT join允许这个,你已经拥有它。