Выборка с объединением и лимитом

283
01 декабря 2017, 06:52

Добрый день Всем добра.

В общем есть 3 таблици. Нужно выбрать все значения, но ограничить выборку лимитом. Что бы значеня выбирались по 9 штук,по полю TEXT.id, и вот тут я не пойму как это сделать.

поясняю по тому что не совсем корректно изложил вопрос.

Нужно выбрать 9 записей не зависимо сколько находится значений в таблице SRC .

Например в таблице SRC 200 записей и в таблице TEXTS 20 записей.

Нужно выбрать все записи где SRC.event_id одинаковы, Но что выборка начиналась с 9 по 18 event_i.

CREATE TABLE `SRC`(
`id` INT(10) NOT NULL AUTO_INCREMENT PRIMARY KEY UNIQUE ,
`event_id` int(10) NOT NULL ,
`big_src` VARCHAR(100) NOT NULL ,
`small_src` VARCHAR(100) NOT NULL ,
`alternate` VARCHAR(50) NOT NULL,
FOREIGN KEY (event_id) REFERENCES TEXTS(id)
)ENGINE = MyISAM DEFAULT CHARSET =utf8 COLLATE = utf8_unicode_ci;
CREATE TABLE `TEXTS`(
`id` INT(10) NOT NULL AUTO_INCREMENT PRIMARY KEY UNIQUE ,
`big_text` VARCHAR(100) NOT NULL ,
`small_text` VARCHAR(100) NOT NULL ,
`datetime` DATETIME NOT NULL
)ENGINE = MyISAM DEFAULT CHARSET =utf8 COLLATE = utf8_unicode_ci;
CREATE TABLE `ALL`(
`id` INT(10) NOT NULL AUTO_INCREMENT PRIMARY KEY UNIQUE ,
`TEXT_id` int(10) NOT NULL ,
`SRC_event_id` int(10) NOT NULL,
FOREIGN KEY (TEXT_id) REFERENCES TEXTS(id),
FOREIGN KEY (SRC_event_id) REFERENCES SRC(event_id)
)ENGINE = MyISAM DEFAULT CHARSET =utf8 COLLATE = utf8_unicode_ci;
SELECT event_id,small_src,alternate,small_text,datetime FROM `TEXTS` 
INNER JOIN `SRC` ON `TEXTS`.id=`SRC`.event_id INNER JOIN `ALL` ON 
`TEXTS`.id=`ALL`.TEXT_id ;
Answer 1

Предположу, что Вы ищете что-то вроде:

SELECT t.id event_id,s.small_src,s.alternate,a.small_text,t.datetime 
FROM `TEXTS` t
JOIN `SRC` s ON s.event_id = t.id
JOIN `ALL` a ON a.TEXT_id = t.id
WHERE t.id IN (SELECT id FROM TEXTS ORDER BY id LIMIT 9 OFFSET 1*9)

Запрос постранично выбирает по 9 texts.id и связанные с ними данные. Страница выбирается параметром offset(0*9, 1*9, 2*9 и т.д.)
Вероятно стоит применить left join, если данных связанных с некоторыми texts.id может не быть.

[42000][1235] This version of MySQL doesn't yet support 'LIMIT & IN/ALL/ANY/SOME subquery'

SELECT t.id event_id,s.small_src,s.alternate,a.small_text,t.datetime 
FROM `TEXTS` t
JOIN `SRC` s ON s.event_id = t.id
JOIN `ALL` a ON a.TEXT_id = t.id
INNER JOIN (SELECT id FROM TEXTS ORDER BY id LIMIT 9 OFFSET 1*9) t2
  ON t.id = t2.id
Answer 2
SELECT event_id,small_src,alternate,small_text,datetime 
FROM `TEXTS` 
INNER JOIN `SRC` ON `TEXTS`.id=`SRC`.event_id 
INNER JOIN `ALL` ON `TEXTS`.id=`ALL`.TEXT_id 
order by event_id
limit 9 OFFSET 9

limit 9 - сколько записей выводить

OFFSET 9 - сколько пропустить

Если я правильно понял суть вопроса.

READ ALSO
Обработка данных

Обработка данных

Пишу простенький обменник для ознакомительных целей, плюс осваиваю laravel

230
Помогите разобрать код по полочкам для понимания написанного

Помогите разобрать код по полочкам для понимания написанного

Из изначальных массивов выведен новый массив с наименованием животных только из 2-х словДалее, выведены названия животных, где 1ое слово остается...

172
ajax запрос в базу данных

ajax запрос в базу данных

Доброго времени суток всем есть скрипт добавления в БД с помощью ajax,

197
Кастомный метод wordpress rest-api

Кастомный метод wordpress rest-api

Как можно создать свой кастомный эндпоинт для Wordpress RestAPI?

212