Автор Тема: запрос  (Прочитано 5853 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн Berkut

  • Завсегдатай
  • Пользователь
  • **
  • Сообщений: 98
  • +0/-0
  • 0
    • Просмотр профиля
    • http://
запрос
« : 06 Декабря 2004, 11:51:13 »
есть таблица

visits (
  id int(11) NOT NULL auto_increment,
  partner_id int(11) default NULL,
  long_ip bigint(20) NOT NULL default \'0\',
  time int(10) unsigned NOT NULL default \'0\',
  referer varchar(255) NOT NULL default \'\',
  user_agent varchar(255) NOT NULL default \'\',
  full_country varchar(100) NOT NULL default \'\',
  unique tinyint(1) NOT NULL default \'0\',
  PRIMARY KEY  (id)

можно-ли подсчитать кол-во полей с определённым partner_id за время между определённым сроком с шагом в сутки? т.е. примерно следующее, но одним запросом:

for ($time time(); $time time() - 3600*24*30;$time-=3600*24) {
    
$begin $time 3600*24;
    
$res mysql_query("SELECT COUNT(*) FROM visits WHERE partner_id=$id AND time BETWEEN $begin AND $time");
}

Оффлайн Макс

  • vir magni ingenii
  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 3534
  • +0/-0
  • 2
    • Просмотр профиля
запрос
« Ответ #1 : 06 Декабря 2004, 15:46:03 »
Попробуй так :
$from = time() - 3600*24*30;

SELECT COUNT(*) , FROM_UNIXTIME(time, \'%Y-%m-%d\') as my_date
FROM visits
WHERE
partner_id = $id AND time BETWEEN $from AND $time
GROUP BY my_date
First learn computer science and all the theory. Next develop a programming style. Then forget all that and just hack. ( George Carrette )

Оффлайн Berkut

  • Завсегдатай
  • Пользователь
  • **
  • Сообщений: 98
  • +0/-0
  • 0
    • Просмотр профиля
    • http://
запрос
« Ответ #2 : 06 Декабря 2004, 16:31:00 »
Макс ОГРОМНОЕ СПАСИБО! С меня ящик пива если появишся в Самаре

Оффлайн Berkut

  • Завсегдатай
  • Пользователь
  • **
  • Сообщений: 98
  • +0/-0
  • 0
    • Просмотр профиля
    • http://
запрос
« Ответ #3 : 07 Декабря 2004, 00:18:55 »
вопрос в догонку:
SELECT COUNT( * ) , FROM_UNIXTIME( xaffilate_visits.time, \'%d\' )
as my_date, sum(
if (
xaffilate_visits.country_code = \'ru\', 1, 0
) )
as from_rus, xaffilate_stat.today
FROM xaffilate_visits, xaffilate_stat
WHERE xaffilate_visits.partner_id = 1 AND xaffilate_visits.time > 1000
and FROM_UNIXTIME( xaffilate_visits.time, \'%d\' ) = FROM_UNIXTIME( xaffilate_stat.time, \'%d\' )
GROUP BY my_date
ORDER BY xaffilate_stat.time

работает, но если в \'WHERE\' поставить не
FROM_UNIXTIME( xaffilate_visits.time, \'%d\' ) = FROM_UNIXTIME( xaffilate_stat.time, \'%d\' )
а
my_date=my_td - пишет неизвестный столбец my_date, хотя в
GROUP BY - "my_date" работает?! и хотелось-бы узнать, не слишком-ли страшный запрос?
« Последнее редактирование: 07 Декабря 2004, 02:45:34 от Berkut »

Оффлайн Phoinix

  • RW
  • Ветеран
  • *****
  • Сообщений: 1097
  • +0/-0
  • 2
    • Просмотр профиля
    • http://phoinix.ucoz.ru
запрос
« Ответ #4 : 07 Декабря 2004, 04:32:44 »
Berkut

Псевдонимы можно использовать только в условиях HAVING и при сортировке.

Оффлайн Berkut

  • Завсегдатай
  • Пользователь
  • **
  • Сообщений: 98
  • +0/-0
  • 0
    • Просмотр профиля
    • http://
запрос
« Ответ #5 : 08 Декабря 2004, 04:24:14 »
как подсчитать в одном запросе кол-во выбранных строк и вывести сами строки подходящие по условию?
типа:
SELECT * FROM table WHERE col = \'smth\'
при этом вывести кол-во выбранных этим запросом строк?

Оффлайн Phoinix

  • RW
  • Ветеран
  • *****
  • Сообщений: 1097
  • +0/-0
  • 2
    • Просмотр профиля
    • http://phoinix.ucoz.ru
запрос
« Ответ #6 : 08 Декабря 2004, 15:13:30 »
Berkut
Цитировать
как подсчитать в одном запросе кол-во выбранных строк и вывести сами строки подходящие по условию?


IMHO в SELECT данный подсчет производить глупо. Количество строк можно получить и после выполнения запроса, как один из параметров результата.

Те же:
mysql_num_rows - для PHP;
rows() - для Perl (DBI).

Оффлайн Berkut

  • Завсегдатай
  • Пользователь
  • **
  • Сообщений: 98
  • +0/-0
  • 0
    • Просмотр профиля
    • http://
запрос
« Ответ #7 : 08 Декабря 2004, 15:53:09 »
я немного тут ошибся, SELECT * FROM table WHERE col = \'smth\' LIMIT $start, $limit
как подсчитать  кол-во строк, как подсчитать кол-во строк выборки, так если-бы она происходила без LIMIT

Оффлайн Phoinix

  • RW
  • Ветеран
  • *****
  • Сообщений: 1097
  • +0/-0
  • 2
    • Просмотр профиля
    • http://phoinix.ucoz.ru
запрос
« Ответ #8 : 08 Декабря 2004, 16:15:36 »
Berkut

Честно говоря, как-то звучала фраза, что лучше сделать 2 простых запроса чем 1 сложный...

SELECT t2.*, COUNT(t1.id) AS number
FROM my_table AS t1, my_table AS t2
WHERE t1.col = \'smth\' AND t2.col = \'smth\'
GROUP BY t2.id, t1.col
LIMIT 10,20

id - соответсвенно уникальный идентификатор...

Оффлайн hanslinger

  • H2Oer
  • Ветеран
  • *****
  • Сообщений: 1148
  • +0/-0
  • 2
    • Просмотр профиля
    • http://www.orava.ru
запрос
« Ответ #9 : 08 Декабря 2004, 16:18:19 »
SELECT *,COUNT(*) ...

Оффлайн Phoinix

  • RW
  • Ветеран
  • *****
  • Сообщений: 1097
  • +0/-0
  • 2
    • Просмотр профиля
    • http://phoinix.ucoz.ru
запрос
« Ответ #10 : 08 Декабря 2004, 16:23:51 »
hanslinger

Шутник, однако... у меня чуть истерика не началась, думал, уже 2 + 2 без логарифмов сложить не могу... :) :) :)

Оффлайн hanslinger

  • H2Oer
  • Ветеран
  • *****
  • Сообщений: 1148
  • +0/-0
  • 2
    • Просмотр профиля
    • http://www.orava.ru
запрос
« Ответ #11 : 08 Декабря 2004, 18:44:42 »
А. Ну да :). Извиняюсь :).

Оффлайн Berkut

  • Завсегдатай
  • Пользователь
  • **
  • Сообщений: 98
  • +0/-0
  • 0
    • Просмотр профиля
    • http://
запрос
« Ответ #12 : 11 Декабря 2004, 21:30:51 »
а вот ещё вопрос назрел
есть
stat:
partner_id | day | day_amount
и
partners
id | total_amount

нужно обновить total_amount
по следующему прниципу -
total_amount=total_amount+(day_amount*someval-day_amount) where day = anotherval
т.е. выбрать day_amount, умноженное на someval для каждого partner_id, где day равен тому-то, и приплюсовать все это к total_amount cоответственно для каждого id
подскажите как сделать?я вообще в тупике, из доки я понял что с update вообще нельзя использовать ни join,  union

 

Sitemap 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28