$sql1 = "SELECT questions FROM last_check_date WHERE user_id=? ORDER BY questions DESC LIMIT 1";
$sql2 = "SELECT id FROM questions WHERE add_dt>?";
Что делают заявления выше?Оптимизация операторов sql для снижения нагрузки на сервер MySQL
Когда я выполняю sql1
, он получает последнюю дату проверки для пользователя.
Затем я выполняю второй запрос, чтобы получить все идентификаторы, где дата добавления> последняя дата проверки (от sql1
), и возвращать число обратных строк.
Что я хочу сделать, это объединить эти 2 оператора в 1 и оптимизировать количество запросов. Может возникнуть следующая проблема:
Нет строки для пользователя в $sql1
: необходимо выбрать все строки в sql2
и вернуть число обратных строк.
Я не могу понять, как он должен выглядеть .. Thx заранее
UPDATE
SHOW CREATE TABLE last_check_date;
результат
CREATE TABLE `last_check_date` (
`id` int(11) unsigned NOT NULL,
`user_id` bigint(20) unsigned NOT NULL,
`questions` datetime DEFAULT NULL,
`users` datetime DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8
И SHOW CREATE TABLE questions;
CREATE TABLE `questions` (
`id` int(11) unsigned NOT NULL AUTO_INCREMENT,
`author_id` bigint(20) unsigned DEFAULT NULL,
`question` text NOT NULL,
`var_a` text NOT NULL,
`var_b` text NOT NULL,
`var_c` text NOT NULL,
`var_d` text NOT NULL,
`var_e` text NOT NULL,
`subject` int(11) unsigned DEFAULT NULL,
`chapter` int(11) unsigned DEFAULT NULL,
`section` int(11) unsigned DEFAULT NULL,
`paragraph` int(11) unsigned DEFAULT NULL,
`rank` tinyint(2) NOT NULL,
`add_dt` datetime NOT NULL,
`answer` varchar(1) NOT NULL,
PRIMARY KEY (`id`),
KEY `fk_chapters-id` (`chapter`),
KEY `fk_paragraphs-id` (`paragraph`),
KEY `fk_subjects-id` (`subject`),
KEY `fk_sections-id` (`section`),
KEY `fk_author-id` (`author_id`),
CONSTRAINT `fk_author-id` FOREIGN KEY (`author_id`) REFERENCES `users` (`id`) ON DELETE SET NULL ON UPDATE CASCADE,
CONSTRAINT `fk_chapters-id` FOREIGN KEY (`chapter`) REFERENCES `chapters` (`id`) ON DELETE SET NULL ON UPDATE CASCADE,
CONSTRAINT `fk_paragraphs-id` FOREIGN KEY (`paragraph`) REFERENCES `paragraphs` (`id`) ON DELETE SET NULL ON UPDATE CASCADE,
CONSTRAINT `fk_sections-id` FOREIGN KEY (`section`) REFERENCES `sections` (`id`) ON DELETE SET NULL ON UPDATE CASCADE,
CONSTRAINT `fk_subjects-id` FOREIGN KEY (`subject`) REFERENCES `subjects` (`id`) ON DELETE SET NULL ON UPDATE CASCADE
) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=utf8
, который должен быть с JOIN, нам нужно узнать больше о структуре таблиц, чтобы узнать, какой столбец является достоянием – jcho360
, пожалуйста, напишите 'SHOW CREATE TABLE last_check_date;' и 'SHOW CREATE TABLE questions;' результаты. С другой стороны, довольно неясно, что вы на самом деле извлекаете и/или типы данных: что должно быть столбцом «вопросы»? Определенно не право на дату? – Sebas
@Sebas yed это дата. Как вы видите из названия таблиц, есть все даты внутри – heron