2013-04-22 4 views
0

Прежде всего, я знаю, что таблица downloads не нормирована.MySQL ГДЕ В шаблоне

У меня есть эти две таблицы:

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') 

Но что бы вернуть мне только карты, которые сделаны только идентификатор пользователя: 1 (в том случае, Никола) и со-карты не показывают.

Моя цель: поиск ID: 1 и карта # 1 и карта # 2 возвращаются, поиск картографа ID # 2 - карта # 2 возвращается

+0

Я бы порекомендовал вам создать FK в таблице Загрузки с ПК в картографов – jcho360

+0

Вы можете сделать присоединиться FIND_IN_SET. Обычно это используется для разделенных запятыми списков, но вы можете сделать замену пространства для запятой, чтобы все еще использовать его. Однако вряд ли это будет эффективным. – Kickstart

ответ

1

Далее на мой комментарий, что-то подобное может быть использован, если вы не можете нормализовать данные

SELECT * 
FROM downloads 
INNER JOIN mappers 
ON FIND_IN_SET(mappers.mapper_name, REPLACE(downloads.author, " ", ",")) > 0 
1

Вы можете попробовать это:

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

Это неэффективно, но оно соответствует вашим потребностям.