1

我有以下表格:

users (id,name)
items (id,title)
users_items (user_id,item_id)

users并且items应该是不言自明的。users_items保存用户是否“收藏”了一个项目。因此,如果 id 为 5 的用户收藏了 id 为 7 的商品,则 users_items 表将分别保存 user_id 和 item_id 的记录 (5,7)。

我希望能够输出所有项目,但在每个项目旁边说明当前登录的用户是否收藏了该项目。

显然,我可以只获取所有项目,然后遍历它们并进行单独的 mysql 调用,以查看是否从 users_items 返回了具有相关用户 ID 和课程 ID 的任何行,但是有没有更好的方法在 1 函数中执行此操作. 也许有一些花哨的加入?

提前致谢。

4

6 回答 6

6
SELECT * FROM items LEFT JOIN users_items ON items.id=users_items.item_id AND user_id=1 -- change user_id

在 PHP 中,下一步就是检查它的计算结果是否为真:

if ($row['item_id'])
{
    // Yes
}
else {
    // No
}
于 2012-07-10T14:10:59.727 回答
0

试试这个SELECT查询:

SELECT *
FROM items i
LEFT JOIN users_items ui on ui.user_id=i.id  and ui.id = curUserId 
于 2012-07-10T14:10:59.587 回答
0
select i.id, i.name, count(ui.item_id) 
from items i
left outer users_items ui on i.id = ui.item_id
    and ui.user_id = 123
group by i.id, i.name
于 2012-07-10T14:11:04.383 回答
0

尝试以下操作:

SELECT I.*, CASE WHEN UI.item_id IS NULL THEN 'No' ELSE 'Yes' END FavouritedByUser
FROM items I
LEFT JOIN ( SELECT item_id
            FROM users_items 
            WHERE user_id = @CurrentUser) UI
ON I.id = UI.item_id
于 2012-07-10T14:11:33.433 回答
0

你可以使用CASE这个。

SELECT i.*, CASE WHEN ui.user_id IS NOT NULL THEN 1 ELSE 0 END
FROM Item i
LEFT OUTER JOIN User_Item ui on ui.item_id = i.id AND ui.user_id = current_user_id
于 2012-07-10T14:12:16.007 回答
0
SELECT i.id, i.title, 
    CASE WHEN ui.item_id IS NOT NULL 
        THEN 'Favorite' 
    ELSE 'Not Favorite'
FROM items i
LEFT JOIN users_items ui ON ui.item_id = i.id
WHERE ui.user_id = some_variable;
于 2012-07-10T14:14:43.547 回答