Запрос выдает странные данные

  • Автор темы Автор темы clevel
  • Дата начала Дата начала

clevel

Новичок
Запрос выдает странные данные

Таблица statistic:
---------------------------------------------------------------
owner(int)|page(int)|when(timestamp(14))|execute(decimal(4,2))|
---------------------------------------------------------------
2 | 10 | 20020912032434 | 0.3234 |
---------------------------------------------------------------
2 | 11 | 20020912032435 | 0.5 |
---------------------------------------------------------------
2 | 10 | 20020912032635 | 0.44 |
---------------------------------------------------------------

запрос к таблице statistic:
SELECT
DATE_FORMAT(statistic.when,'%Y%m'),
COUNT(copy.page), //выдает КВАДРАТ необходимых данных
Min(copy.execute)/2+Max(copy.execute)/2
FROM statistic,statistic copy
WHERE statistic.owner=2
AND copy.owner=statistic.owner
AND DATE_FORMAT(copy.when,'%Y%m')=DATE_FORMAT(statistic.when,'%Y%m')
GROUP BY DATE_FORMAT(statistic.when, '%Y%m')
ORDER BY statistic.when

Таблица cookies:
-----------------------------------------
owner(int)|page(int)|when(timestamp(14))|
-----------------------------------------
2 | 10 | 20020912032434 |
-----------------------------------------
2 | 11 | 20020912032435 |
-----------------------------------------
2 | 10 | 20020912032635 |
-----------------------------------------

Запрос к таблицам cookies,statistic:
SELECT
DATE_FORMAT(cookies.when,'%Y%m'),
cookies.page,
COUNT(cookies.page) //выдает значение, увеличеннное в 91 раз
FROM statistic,cookies
WHERE statistic.owner=2
AND cookies.owner=statistic.owner
AND DATE_FORMAT(cookies.when,%Y%m)=DATE_FORMAT(statistic.when,'%Y%m')
GROUP BY DATE_FORMAT(statistic.when, '%Y%m'),cookies.page
ORDER BY statistic.when

Вопросы:
1.Почему в первом запросе возвращает одно из значений, возведенное во вторую степень, а во втором случае - умноженную на 91. В чем ошибка, приводящая к искажению результатов?
2.Можно ли заменить DATE_FORMAT(...) в теле WHERE как-нибудь, так как в SELECT такая конструкция уже имеется. Пытался сделать так: SELECT DATE_FRMAT(..) AS num и далее использовать num, однако выдает ошибку...
 
Что ты в итоге хочешь получить?

то что у тебя получились квадраты и *91 - это случайные значения
можешь добавить еще записей в таблицы и обнаружишь совсем другие значения множителей и квадратов , кубов ....
 
то что у тебя получились квадраты и *91 - это случайные значения
можешь добавить еще записей в таблицы и обнаружишь совсем другие значения множителей и квадратов , кубов ....
Мне надо "чистые значения", откуда дополнительные примеси берутся, никак понять не могу... поэтому и привел структцру таблиц с запросами, может я где-то глючу...
 
clevel в первом запросе у тебя идет GROUP BY только по DATE_FORMAT(statistic.when, '%Y%m')

а во втором запросе по DATE_FORMAT(statistic.when, '%Y%m') и cookies.page

вот и смотри что к чему.
 
Убери из запросов GROUP BY и посмотри из каких записей отбираются MIN MAX COUNT

в первом SQL у тебя по условию соединяются все записи (каждый с каждым) вот и получается квадрат
 
попробуй такой select для 1 SQL
SELECT
DATE_FORMAT(statistic.when,'%Y%m'),
COUNT(statistic.page),
Min(statistic.execute)/2+Max(statistic.execute)/2
FROM statistic
WHERE statistic.owner=2
GROUP BY 1
ORDER BY 1
 
Убери из запросов GROUP BY и посмотри из каких записей отбираются MIN MAX COUNT

в первом SQL у тебя по условию соединяются все записи (каждый с каждым) вот и получается квадрат
не совсем понял..
передо мной стоит задача: отобрать все уникальные месяцы с годами и по каждому найденному уникальному значению выбрать количество page. Group by делает выборку уникальных дат, а через таблицу copy я делаю count(page) для каждого месяца года...
1.Как избежать соединения записей? (чтобы от квадрата избавиться)
2.Если я уберу group by. все рассыпиться...
 
SELECT
DATE_FORMAT(statistic.when,'%Y%m'),
COUNT(statistic.page),
Min(statistic.execute)/2+Max(statistic.execute)/2
FROM statistic
WHERE statistic.owner=2
GROUP BY 1
ORDER BY 1
Получился первый запрос... класс!!! только что интересно... вроде одна таблица, но если убрать statistic из определений полей, то запрос выдает ошибку...
 
сделал по аналогии второй запрос, все заработало, спасибо...
такой вопрос: как сделать запрос, который делает выборку из таблицы statistic (см. начало) уникальных page, если разница по времени между ближайшими записями when больше 10 мин
(как я думаю, две ближайшие записи не обязательно должны идти одна за другой по времени)
 
Получился первый запрос... класс!!! только что интересно... вроде одна таблица, но если убрать statistic из определений полей, то запрос выдает ошибку...
потому как использовать зарезервированные слова (when) в качестве имен - плохой тон.
 
потому как использовать зарезервированные слова (when) в качестве имен - плохой тон.
а если я буду выдумывать непонятные слова, которые не объясняют что-зачем, я запутаюсь в программе...
 
а ты добавляй префикс к полям:

t_when (time)
i_id (int)
s_page (string)

и в РНР коде будет всё более читабельно, и конфликтов с зарезервированными словами не получишь
 
Сверху