Forum Webscript.Ru
Общие => Базы данных => Тема начата: Berkut от 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");
}
-
Попробуй так :
$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
-
Макс ОГРОМНОЕ СПАСИБО! С меня ящик пива если появишся в Самаре
-
вопрос в догонку:
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" работает?! и хотелось-бы узнать, не слишком-ли страшный запрос?
-
Berkut
Псевдонимы можно использовать только в условиях HAVING и при сортировке.
-
как подсчитать в одном запросе кол-во выбранных строк и вывести сами строки подходящие по условию?
типа:
SELECT * FROM table WHERE col = \'smth\'
при этом вывести кол-во выбранных этим запросом строк?
-
Berkut
как подсчитать в одном запросе кол-во выбранных строк и вывести сами строки подходящие по условию?
IMHO в SELECT данный подсчет производить глупо. Количество строк можно получить и после выполнения запроса, как один из параметров результата.
Те же:
mysql_num_rows - для PHP;
rows() - для Perl (DBI).
-
я немного тут ошибся, SELECT * FROM table WHERE col = \'smth\' LIMIT $start, $limit
как подсчитать кол-во строк, как подсчитать кол-во строк выборки, так если-бы она происходила без LIMIT
-
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 - соответсвенно уникальный идентификатор...
-
SELECT *,COUNT(*) ...
-
hanslinger
Шутник, однако... у меня чуть истерика не началась, думал, уже 2 + 2 без логарифмов сложить не могу... :) :) :)
-
А. Ну да :). Извиняюсь :).
-
а вот ещё вопрос назрел
есть
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