0

我有两张桌子:

表1:用户

| user_Id  | likes       |               
| 100      | 200,201,217 |
| 101      | 200,215,216 |

表2:文章

| article_id| author_id | title             |
| 216       | 100       | This is test      |
| 200       | 101       | this is only test |

当用户登录成功$userId=user_Id时,显示该用户喜欢的所有文章?

我不知道如何从用户表中的 likes 列中删除带有逗号的记录?

4

5 回答 5

1

你也可以使用FIND_IN_SET

SELECT a.user_id, b.*
FROM user a, articles b
WHERE  FIND_IN_SET(b.article_id, a.likes)

SQLFiddle 演示

于 2012-10-01T06:33:58.343 回答
1
SELECT 
    * 
FROM user 
LEFT JOIN articles on FIND_IN_SET(articles.article_id , likes) 
于 2012-10-01T06:37:04.830 回答
0
select * 
  from articles a,
       user u
 where FIND_IN_SET (a.article_id, likes)
于 2012-10-01T06:35:40.520 回答
0

您可以使用过程来完成它,不像FIND_IN_SET,这样您就可以从索引中获得所有好处,随着数据库的增长,索引速度会更快并且可以更好地扩展:

DELIMITER |
create procedure articles_liked_by_user(user_id_in INT)
BEGIN
set @sql = CONCAT('select * from articles where article_id in (', (select likes from user where user_id = user_id_in), ')');
PREPARE stm from @sql;
EXECUTE stm;
END;
|
DELIMITER ;

使用:

call articles_liked_by_user(100);
于 2012-10-01T07:09:55.610 回答
-2

查看。

 select * 
from articles
where FIND_IN_SET(articles.article_id,(select likes from user where user_id=100));
于 2012-10-01T06:32:04.413 回答