Задавайте вопросы, мы ответим
Вы не зашли.
Отредактированно okuznetsov (03.10.2014 16:41:45)
Неактивен
1. У вас некорректный запрос, посмотрите http://sqlinfo.ru/articles/info/18.html
2. Группировку лучше поместить во from подзапрос
3. Нужен ли именно left join? (т.е. возможна игра без категории).
Неактивен
vasya написал:
1. У вас некорректный запрос, посмотрите http://sqlinfo.ru/articles/info/18.html
2. Группировку лучше поместить во from подзапрос
3. Нужен ли именно left join? (т.е. возможна игра без категории).
1. и 2. Предполагал, что запрос не верный. не особо силён в mysql, чтобы справиться с поправкой запроса самостоятельно. сейчас буду изучать вашу ссылку.
3. вы верно заметили про left join. я не указал в предыдущем сообщении, забыл, да действительно можно обойтись без категории, она не обязательна.
Неактивен
В общем, в результате у меня получились два запроса, вроде бы оба одинаково правильных. Хотелось бы чтобы вы порекомендовали какой из них более правильный (может быть с точки зрения качественного стиля написания или рассчитанный на скоростное выполнение при росте в будущем нагрузки)? А также, вообще это правильные запросы, т.е. правильно ли написаны с точки зрения функционирования?
Неактивен
От перестановки мест слагаемых сумма не изменится
Только вместо * укажите в явном виде нужные вам поля.
Неактивен
ясно. спасибо за помощь)
Неактивен
1) Также хотелось бы узнать можно ли что-то сделать и с этим запросом:
Неактивен
1) SHOW CREATE TABLE game
CREATE TABLE `game` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`catid` int(11) NOT NULL,
`title` varchar(255) CHARACTER SET utf8 NOT NULL,
`object` text CHARACTER SET utf8 NOT NULL,
`description` text CHARACTER SET utf8 NOT NULL,
`image` varchar(255) NOT NULL,
`votes_summ` int(11) NOT NULL,
`votes_count` int(11) NOT NULL,
`views` int(11) NOT NULL,
`favorites` int(11) NOT NULL,
`date` datetime NOT NULL,
`is_uniq` tinyint(1) NOT NULL,
PRIMARY KEY (`id`),
KEY `catid` (`catid`),
KEY `date` (`date`),
KEY `favorites` (`favorites`),
KEY `views` (`views`),
KEY `title` (`title`),
KEY `votes_summ` (`votes_summ`,`votes_count`),
KEY `is_uniq` (`is_uniq`)
) ENGINE=InnoDB AUTO_INCREMENT=268052 DEFAULT CHARSET=latin1
2) SHOW CREATE TABLE tables
CREATE TEMPORARY TABLE `TABLES` (
`TABLE_CATALOG` varchar(512) NOT NULL DEFAULT '',
`TABLE_SCHEMA` varchar(64) NOT NULL DEFAULT '',
`TABLE_NAME` varchar(64) NOT NULL DEFAULT '',
`TABLE_TYPE` varchar(64) NOT NULL DEFAULT '',
`ENGINE` varchar(64) DEFAULT NULL,
`VERSION` bigint(21) unsigned DEFAULT NULL,
`ROW_FORMAT` varchar(10) DEFAULT NULL,
`TABLE_ROWS` bigint(21) unsigned DEFAULT NULL,
`AVG_ROW_LENGTH` bigint(21) unsigned DEFAULT NULL,
`DATA_LENGTH` bigint(21) unsigned DEFAULT NULL,
`MAX_DATA_LENGTH` bigint(21) unsigned DEFAULT NULL,
`INDEX_LENGTH` bigint(21) unsigned DEFAULT NULL,
`DATA_FREE` bigint(21) unsigned DEFAULT NULL,
`AUTO_INCREMENT` bigint(21) unsigned DEFAULT NULL,
`CREATE_TIME` datetime DEFAULT NULL,
`UPDATE_TIME` datetime DEFAULT NULL,
`CHECK_TIME` datetime DEFAULT NULL,
`TABLE_COLLATION` varchar(32) DEFAULT NULL,
`CHECKSUM` bigint(21) unsigned DEFAULT NULL,
`CREATE_OPTIONS` varchar(255) DEFAULT NULL,
`TABLE_COMMENT` varchar(2048) NOT NULL DEFAULT ''
) ENGINE=MEMORY DEFAULT CHARSET=utf8
Неактивен
Если вот таким образом сделать - это хорошее решение?
Неактивен
Расшифровка (на всякий случай):
JOIN добавляет все ID который больше или равны нашему случайному значению и мы выбираем ближайшего соседа, если равенство не возможно. НО как только 15 строк найдено мы останавливаемся.
Неактивен
А по второму запросу можете помочь? Я не знаю и не понимаю пока для чего и зачем он нужен, но он находится в моём списке медленных запросов mysql-slow.log и мне нужно с ним разобраться
Неактивен
okuznetsov написал:
Если вот таким образом сделать - это хорошее решение?
SELECT *
FROM game AS r1
JOIN
(
SELECT (RAND() * (SELECT MAX(id) FROM game)) AS id
) AS r2
WHERE r1.id >= r2.id
#ORDER BY r1.id ASC
LIMIT 15;
Плохое.
1. Выбираются не 15 случайных, а 15 подряд от случайного места.
2. Возможен вариант, когда запрос вернет меньше 15 значений, если случайная позиция будет выбрана близко к максимальному id.
Неактивен
okuznetsov написал:
А по второму запросу можете помочь? Я не знаю и не понимаю пока для чего и зачем он нужен, но он находится в моём списке медленных запросов mysql-slow.log и мне нужно с ним разобраться
Важен не факт медленного выполнения запроса, а его частота использования.
Напрямую вы его не улучшите. Если же он выполняется часто, то нужно будет смотреть приложение где он используется - насколько точные данные там нужны, возможно ли кеширование.
Неактивен