Как на PHP составить MySQL SELECT из двух таблиц одновременно с 2-мя массивами в запросе и условием?

Всем добрейшего времени суток!
Мучаюсь уже неделю, ничего похожего ни на хабре ни в гугле не нашел.

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

Таблицы у меня примерно такие:

таблица post
----------------------------------------------------------------------------------------
id | user_id_posted | user_id | type | date | content | и тд...
-----------------------------------------------------------------------------------------
таблица grouppost
----------------------------------------------------------------------------------------
id | user_id_posted | group_id | type | date | content | и тд...
-----------------------------------------------------------------------------------------

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

Переменные php участвующие в запросе:
$array1 = 1, 13, 5, 4, 86, 6, ... ;
$array1 = 1, 35, 3, 46, 5, 17, ... ;

Массивы преобразованы в нужный вид:
$array1 = implode(", ", $oldarray1);

1 часть:
SELECT * FROM "post" 
WHERE user_id = IN ( $array1 )
LIMIT 0, 20

Условие поле user_id_posted должно быть равно полю user_id
(если условие в таком случае не возможно, то можно без него)

2 часть:
SELECT * FROM "userpost" 
WHERE group_id = IN ( $array2 )
LIMIT 0, 20


3 часть
ORDER BY date  (тип datetime)
LIMIT 0, 20


На счет LIMIT не знаю как описать правильно, в итоге должно выбраться всего 20 записей, я полагаю что сначала MySQL выбирает 1 запрос - 20 записей, потом 2 запрос - 20 записей, далее сортирует их и возвращает 20 из 40, остальные 20 он выкидывает.
Ну это только в теории.

Буду весьма благодарен за помощь! А то я мучаюсь с этим запросом уже неделю.
  • Вопрос задан
  • 4590 просмотров
Решения вопроса 1
egor_nullptr
@egor_nullptr
SELECT * FROM ((
SELECT id, user_id_posted, user_id as uid, type, `date`, content 
FROM "post" 
WHERE user_id = IN ( $array1 ) AND user_id_posted = user_id
LIMIT 20
) UNION (
SELECT id, user_id_posted, group_id as uid, type, `date`, content
FROM "userpost" 
WHERE group_id = IN ( $array2 )
LIMIT 20
))
ORDER BY `date`
LIMIT 20
Ответ написан
Пригласить эксперта
Ответы на вопрос 3
disc
@disc
веб-разработчик
Создайте в sql fiddle тестовую базу с вашими таблицами и текущим запросом, который не верно отрабатывает. Попробую помочь. Из того что вы описали сложно попробовать построить запрос.
Ответ написан
Комментировать
@FreeZa Автор вопроса
<font size=+100500>ТАБЛИЦА ДОЛЖНА БЫТЬ ОДНА</font>


на то они и 2 разные таблицы, так как хранят данные из разных источников, структура у них похожа, за исключением одного поля, именно поэтому их две, а не одна
Ответ написан
FanatPHP
@FanatPHP
Чебуратор тега РНР
сами таблицы очень похожи, разница только в названии одного из полей

<font size=+100500>ТАБЛИЦА ДОЛЖНА БЫТЬ ОДНА</font>
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы