0

私は2つのテーブルを持っています:

表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
SELECT 
    * 
FROM user 
LEFT JOIN articles on FIND_IN_SET(articles.article_id , likes) 
于 2012-10-01T06:37:04.830 に答える
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 に答える
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 に答える