|
Выборка следующей записи после максимального знпчения.
|
|||
---|---|---|---|
#18+
какие sql запросы посылвть уже 50 вариантов наверное перепробовал за 3 дня :( --------------------------------------------------- есть структура таблицы: | id | user | campaign | URL | status | hits | ClickDate | id - auto_increment status - 1/0 = active/inactive hits - сколько кликов ещё доступно для url ClickDate - DateStamp последнего клика --------------------------------------------------- задача такова: юзер обращается к ad.php и редиректится на один из УРЛ-ов. но УРЛ должен выбираться не рэндом а один за другим, то есть находим ID c максимальным ClickDate (DateStamp последнего клика) и берём следующий URL по ID после этого смотрим на его статус и количество хитов и апдейтим его ClickDate и декрементим hits (ну апдейты это мелочи :) просто инфо для общей картины) и так ситуация: | id | user | campaign | URL | status | hits | ClickDate | ..... | 10 | vasea | MYCAMP | http://www.google.com | 1 | 50 | 111111112 | | 11 | petea | SOMENAME | http://www.someurl.com | 1 | 50 | 111111111 | | 12 | petea | SOMENAME | http://www.url.com | 0 | 50 | 111111105 | | 13 | vasea | MYCAMP | http://www.yahoo.com | 1 | 50 | 111111105 | ..... находим МАХ ClickDate=111111112 у записи с ID=10 ... и надо получить URL из записи 11 после этого по той же аналогии для следующего обращения к скрипту должна уже выбраться запись с номером 13 (потому что у 12 status=0) максимально к чему я пришёл: I) $query="SELECT id,MAX(ClickDate) as maxClDate FROM urls WHERE status=1 GROUP BY id"; $res=connect_query($query,$db); $row=mysql_fetch_array($res); $query="SELECT id,URL,ClickDate FROM urls WHERE hits>0 AND status=1 AND id>".$row['id']." LIMIT 1"; II) даже до такого извращения дошёл: $query="SELECT u1.id as id, u1.URL as URL,u1.ClickDate FROM urls AS u1, urls AS u2 WHERE u1.id=u2.id AND u1.status=1 AND u2.status=1 GROUP BY u1.status HAVING u1.ClickDate=MAX(u2.ClickDate) "; $res=connect_query($query,$db); $row=mysql_fetch_array($res); $query="SELECT id,URL,ClickDate FROM urls WHERE hits>0 AND status=1 AND id>".$row['id']." LIMIT 1"; ну и после этого я здался и решил совета спрашивать .... думаю SQL запросы лучше объяснили то что я словами пытался донести :) подскажите может я вообще не тем путём пошёл :( или как правильно составить запросы ... |
|||
:
Нравится:
Не нравится:
|
|||
02.03.2004, 16:17 |
|
Выборка следующей записи после максимального знпчения.
|
|||
---|---|---|---|
#18+
Попробуй так : select URL from urls where id = (select min(id) from urls where id > ( select max(id) from urls where ClickDate = ( select max(ClickDate) from urls) ) and status = 1 ) P.S. ну конечно коряво ;-), но я сам не большой спец в SQL. ... |
|||
:
Нравится:
Не нравится:
|
|||
03.03.2004, 08:07 |
|
Выборка следующей записи после максимального знпчения.
|
|||
---|---|---|---|
#18+
Я в программировании новичек и ламмер, но как вариант, из того, что я знаю - эту задачу можно попробовтаь решить рекурсией... P.S. Я не уверен в корректности, но уж больно похоже на примеры в книжках, которые я успел прочесть.... Одна большая повторяющаяся задача, которую можно разбить на более мелкие. ------------------------------------------- Артитсты не приехали, приехали цыгане ... |
|||
:
Нравится:
Не нравится:
|
|||
03.03.2004, 11:31 |
|
Выборка следующей записи после максимального знпчения.
|
|||
---|---|---|---|
#18+
mysql не поддерживает вложенные запросы :( я когнечно могу пойти примитивом и написать 3 sql запроса (так и сделаю от безисходности наверное) select max(ClickDate) as ClickDate from urls select id from urls where ClickDate='$row[ClickDate]' select id,URL FROM urls WHERE hits>0 AND status=1 AND id>$row['id'] LIMIT 1 но ведь первые 2 можно объеденить как то 100% чтоб получить ID записи с мах ClickDate ... ... |
|||
:
Нравится:
Не нравится:
|
|||
03.03.2004, 12:19 |
|
|
start [/forum/topic.php?fid=47&tid=1855372]: |
0ms |
get settings: |
9ms |
get forum list: |
14ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
53ms |
get topic data: |
12ms |
get forum data: |
3ms |
get page messages: |
47ms |
get tp. blocked users: |
2ms |
others: | 337ms |
total: | 483ms |
0 / 0 |