0

まず、downloadsテーブルが正規化されていないことを知っています。

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

downloads

map | author
1 | Nikola
2 | Nikola George

mappers

mapper_id | mapper_name
1 | Nikola
2 | George

特定のユーザーが ID で見つけられる可能性のあるすべてのダウンロード行を見つけたいと考えています。

私がやったことは次のとおりです。

SELECT * FROM downloads WHERE author IN (SELECT mapper_name FROM mappers WHERE mapper_id = '1')

しかし、それは userid: 1 (この場合は Nikola) によってのみ行われたマップのみを返し、共同マップは表示されません。

私の目標は: ID: 1 の検索: マップ #1 とマップ #2 の両方が返され、マッパー ID #2 の検索 - マップ #2 が返されます

4

2 に答える 2

1

私のコメントに加えて、データを正規化できない場合は、このようなものを使用できます

SELECT * 
FROM downloads 
INNER JOIN mappers
ON FIND_IN_SET(mappers.mapper_name, REPLACE(downloads.author, " ", ",")) > 0
于 2013-04-22T16:02:46.733 に答える
1

これを試すことができます:

select 
from downloads d join
     mappers m
     on concat(' ', d.author, ' ') like concat('% ', m.mapper_name, ' %')
where m.id = 1

これは効率的ではありませんが、ニーズを満たしています。

于 2013-04-22T15:59:28.613 に答える