0

私は MySQL を使用しており、ドキュメントとユーザー間の接続/リンクを保存するテーブル (documentShips) を持っています。

  • users テーブルには、id、first_name、last_name などの列があります。
  • ドキュメント テーブルには id と users を含む列があり、users 列にはカンマ区切りの値が含まれます
    • 例: "Joe Bloggs, Fred Nerk, Simon McCool" など...

like ステートメントを使用して、テーブル (ドキュメントとユーザー) 間でユーザーを照合したい。

where documents.authors like '% users.last_name %'

それらを documentShips テーブルに挿入します。例:

insert into documentShips (user_id, document_id) ... values () ... where ...

これを行うための有効な (mysql) 挿入ステートメントを作成するのに苦労しています。

どんな助けでも大歓迎です!!!

ありがとう、ジョン。

4

2 に答える 2

0

私が正しく理解していればFIND_IN_SET()、このように使用できます

INSERT INTO documentShips (user_id, document_id)
SELECT u.id, d.id 
  FROM documents d JOIN users u
    ON FIND_IN_SET(CONCAT(u.first_name, ' ', u.last_name), d.authors) > 0
 ORDER  BY d.id, u.id

これがSQLFiddleのデモです

正しく機能させるには、カンマ区切りの値のdocument.authorsカンマの前後にスペースを入れないようにする必要があります。実際にスペースがある場合は、最初に次のようなクエリでそれらを削除します

UPDATE documents
   SET authors = REPLACE(REPLACE(authors, ' ,', ','), ', ', ',');

これがSQLFiddleのデモです

次に、テーブルを正規化することを検討してください。documents

于 2013-10-23T15:21:26.600 に答える