Добрый день Всем добра.
В общем есть 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 ;
Предположу, что Вы ищете что-то вроде:
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
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 - сколько пропустить
Если я правильно понял суть вопроса.
Сборка персонального компьютера от Artline: умный выбор для современных пользователей