php - mysql : select rows from table 1 and test if rows exists in table 2

标签 php mysql sql

这是我的查询:

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

其中“25”是访问者的 ID。我的表中有一个“wid”键,如果当前用户(id:25)没有关注返回的愿望 list ,则该键为空。

这是我的数据库和目标:

用户(ID、用户名等)

Whislists (id, title, comment, user_id) -> 与用户表的多对一关系

wishlist_following (id, user_id, Wishlist_id) -> 与用户表的多对多关系

我的目标:我想从用户的个人资料中获取愿望 list (从 URL 中提取用户名),并了解每个愿望 list 当前用户(访问者)是否关注此列表。

这是最好的方法吗?

最佳答案

此查询

SELECT w.title
FROM users u, wishlists w, wishlist_following wf
WHERE u.id = 1 -- visitor
AND w.user_id = 3 -- viewed profile
AND wf.user_id = u.id
AND wf.wishlist_id = w.id

应返回愿望 list ,后跟来自 id=3 的用户个人资料的访客 (id 1)

好的,我明白了,试试这个:

SELECT w.title, wf.id
FROM users u
LEFT JOIN wishlists w ON w.user_id = 3 -- viewed profile
LEFT JOIN wishlist_following wf ON wf.wishlist_id = w.id
WHERE u.id = 1 -- visitor

简化版本:

SELECT w.title, wf.id
FROM users u, wishlists w
LEFT JOIN wishlist_following wf ON wf.wishlist_id = w.id
WHERE u.id = 1 -- visitor
AND w.user_id = 3 -- viewed profile

关于php - mysql : select rows from table 1 and test if rows exists in table 2,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21678262/

相关文章:

mysql - 尝试进行 LEFT JOIN,但最终得到空结果

sql - 从 UNION sql 中回显?

sql - 将查询转换为SQL Server语法

javascript - 动态添加的表单字段不会发布到服务器

php - 使用php将关联数组插入mysql

mysql - 使用通用 where 过滤器参数从 mysql 数据库表中删除记录的工具

mysql - 通过检查两列获取出现在一个表中但不在另一个表中的唯一行

PHP foreach 循环使用排除某些结果的值填充下拉列表

php - 无法获得使用 ajax 和 php 的点击功能

php - 为什么我的 URL 重定向不起作用?