2015-01-30 2 views
0

У меня есть массив имен авторов, я должен выбрать ряд статей авторов, существует ограничение на то, что имя автора находится в содержимом, являющемся текстом. есть ли какое-либо хорошее решение, которое мне не нужно записывать по одному, я могу получить запись каждого автора в одном запросе.MySQL Resultset Issue

SELECT n0_.id AS id0 
    FROM newspaper n0_ 
     INNER JOIN newspaper_translation n1_ ON n0_.id = n1_.translatable_id 
     INNER JOIN newspaper_channels n3_ ON n0_.id = n3_.news_id 
     INNER JOIN channels c2_ ON c2_.id = n3_.channel_id 
WHERE n1_.locale = 'zh_CN' 
    AND (c2_.reference_id = '057PL' AND n1_.content LIKE '%黎子珍%') 
ORDER BY n0_.id DESC 
LIMIT 1 

Я хочу передать несколько имен авторов и хочу получить отдельную запись каждого автора. Но я хочу выполнить запрос один раз.

ответ

0

Вы можете построить пункт where используя последовательность or утверждений:

WHERE n1_.locale = 'zh_CN' AND c2_.reference_id = '057PL' AND 
     (n1_.content LIKE '%黎子珍%' OR n1_.content LIKE '%子珍%' OR n1_.content LIKE '%黎子%') 

Однако, если у вас есть какой-либо контроль над базой данных, вы должны иметь таблицу, которая соответствует авторам по каждому пункту, с одной строкой на автора и статью, над которой работал автор. Это называется соединительной таблицей, и это намного облегчает ответ на эти типы вопросов.

EDIT:

Вы можете взять исходный запрос и повторить его с помощью union all:

(SELECT n0_.id AS id0 
    FROM newspaper n0_ 
     INNER JOIN newspaper_translation n1_ ON n0_.id = n1_.translatable_id 
     INNER JOIN newspaper_channels n3_ ON n0_.id = n3_.news_id 
     INNER JOIN channels c2_ ON c2_.id = n3_.channel_id 
WHERE n1_.locale = 'zh_CN' 
    AND (c2_.reference_id = '057PL' AND n1_.content LIKE '%黎子珍%') 
ORDER BY n0_.id DESC 
LIMIT 1) 
UNION ALL 
(SELECT n0_.id AS id0 
    FROM newspaper n0_ 
     INNER JOIN newspaper_translation n1_ ON n0_.id = n1_.translatable_id 
     INNER JOIN newspaper_channels n3_ ON n0_.id = n3_.news_id 
     INNER JOIN channels c2_ ON c2_.id = n3_.channel_id 
WHERE n1_.locale = 'zh_CN' 
    AND (c2_.reference_id = '057PL' AND n1_.content LIKE '%黎珍%') 
ORDER BY n0_.id DESC 
LIMIT 1) 

Однако, на данный момент, вы можете также просто запустить отдельные запросы.

+0

Проблема в том, что у меня нет ассоциации с авторами. – Baran

+0

Но мне нужно ровно один для каждого, так как он будет возвращать много записей. – Baran

Смежные вопросы