Запрос из нескольких таблиц с общим LIMIT

У меня есть общий предел для нумерации страниц, который отображает 30 элементов на странице

Теперь мне нужно получить результаты, используя сопоставление с 3 различными таблицами, и получить 3 поля из каждой таблицы.

Поля таблицы А news_id, title, content
Поля таблицы B events_id, title, content
Поля таблицы C enc_id, title, content

И где условие

WHERE ( MATCH (title) AGAINST('{$search}') OR MATCH(content) AGAINST('{$search}')OR MATCH(resume) AGAINST('{$search}') )

Также каждая строка таблицы имеет поле состояния, которое должно быть равно 1 в условии where.

В конце мне нужно сделать LIMIT $start_from, 30 для глобального запроса

Любой возможный способ сделать это?

** РЕДАКТИРОВАТЬ **

Это запрос, который я использую для одной таблицы

"SELECT
news_id,title,
FROM news
WHERE ( MATCH (title) AGAINST('{$search}') OR MATCH(resume)      AGAINST('{$search}')OR MATCH(content) AGAINST('{$search}')

AND noticias.status = 1

LIMIT 0, 30"

И это то, что я пытался безуспешно. это должно принести 7 строк, но вместо этого приносит 30 некоторых

SELECT
news.news_id AS id,
events.events_id AS id,
enc.enc_id AS id,
news.title AS title,
events.title AS title,
enc.title AS title

FROM news, events, enc

WHERE ( MATCH (news.title) AGAINST('{$search}') OR MATCH(news.resume) AGAINST('{$search}')OR MATCH(news.content) AGAINST('{$search}')
OR  MATCH (enc.title) AGAINST('{$search}') OR MATCH(enc.resume) AGAINST('{$search}')OR MATCH(enc.content) AGAINST('{$search}')
OR MATCH (events.title) AGAINST('{$search}') OR MATCH(events.resume) AGAINST('{$search}')OR MATCH(events.content) AGAINST('{$search}') )

AND ( news.status = 1 OR enc.status = 1 OR events.status = 1)

LIMIT 0, 30

1

Решение

Я нашел решение, поэтому поделюсь им здесь на случай, если кому-то еще это понадобится.

С помощью UNION:

(SELECT news_id AS id, title, 'news' AS origin FROM news WHERE ( MATCH (title) AGAINST('{$search}') OR MATCH(resume) AGAINST('{$search}')OR MATCH(content) AGAINST('{$search}') AND status = 1) )
UNION
(SELECT events_id AS id, title, 'events' AS origin FROM events WHERE ( MATCH (title) AGAINST('{$search}') OR MATCH(resume) AGAINST('{$search}')OR MATCH(content) AGAINST('{$search}') AND status = 1) )
UNION
(SELECT enc_id AS id, title, 'enc' AS origin FROM enc WHERE ( MATCH (title) AGAINST('{$search}') OR MATCH(resume) AGAINST('{$search}')OR MATCH(content) AGAINST('{$search}') AND status = 1) )
LIMIT $start_from, 30

Я использую поле origin знать, из какой таблицы пришел каждый контент.

2

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]