![]()  | 
		
Задавайте вопросы, мы ответим
Вы не зашли.
Отредактированно 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 и мне нужно с ним разобраться
Важен не факт медленного выполнения запроса, а его частота использования.
Напрямую вы его не улучшите. Если же он выполняется часто, то нужно будет смотреть приложение где он используется - насколько точные данные там нужны, возможно ли кеширование.
Неактивен