powered by simpleCommunicator - 2.0.58     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Выборка следующей записи после максимального знпчения.
4 сообщений из 4, страница 1 из 1
Выборка следующей записи после максимального знпчения.
    #32428229
JackS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
какие 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 запросы лучше объяснили то что я словами пытался донести :)

подскажите может я вообще не тем путём пошёл :( или как правильно составить запросы
...
Рейтинг: 0 / 0
Выборка следующей записи после максимального знпчения.
    #32428868
guest
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Попробуй так :
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.
...
Рейтинг: 0 / 0
Выборка следующей записи после максимального знпчения.
    #32429200
Фотография 4m@t!c
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я в программировании новичек и ламмер, но как вариант, из того, что я знаю - эту задачу можно попробовтаь решить рекурсией...
P.S. Я не уверен в корректности, но уж больно похоже на примеры в книжках, которые я успел прочесть.... Одна большая повторяющаяся задача, которую можно разбить на более мелкие.
-------------------------------------------
Артитсты не приехали, приехали цыгане
...
Рейтинг: 0 / 0
Выборка следующей записи после максимального знпчения.
    #32429325
JackS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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 ...
...
Рейтинг: 0 / 0
4 сообщений из 4, страница 1 из 1
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Выборка следующей записи после максимального знпчения.
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]