Очень неудобные запросы MySQL

G
На сайте с 24.10.2009
Offline
51
479

2 дня ломаю голову, как решить задачу оптимизированно, но не придумал.

Есть 2 таблицы. В одной - биды. Во второй, список действий, произведенных над бидами.

например во второй таблице для одного бида могут быть записи: создан бид, оплачен бид, отменен модератором и т.п.

В первой таблице есть время создания бида.

Если прошло 5 дней с момента создания бида, и над ним не было произведено действия оплаты, то надо поставить ему статус, отменен в первую таблицу.

Как можно вытащить список бидов для которых нет записи об оплате во второй таблице одним запросом. Ну или более менее оптимизированно.

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

Спасибо заранее.

IL
На сайте с 20.04.2007
Offline
435
#1
Gaaarfild:
Как можно вытащить список бидов для которых нет записи об оплате во второй таблице одним запросом. Ну или более менее оптимизированно.

LEFT Join-ом по ID-шнику

WHERE ... IS NULL

или

SELECT * from bid WHERE id

NOT IN (select DISTINCT id_bid from bid_payment)

Оптимизировать по обстановке (за период, или выбирать только с PK > $id_start)

итд

p.s. если в вопросе приводить структуру таблиц, есть шанс получить более конкретный ответ.

... :) Облачные серверы от RegRu - промокод 3F85-3D10-806D-7224 ( http://levik.info/regru )
G
На сайте с 24.10.2009
Offline
51
#2
ivan-lev:
LEFT Join-ом по ID-шнику
WHERE ... IS NULL

или

SELECT * from bid WHERE id
NOT IN (select DISTINCT id_bid from bid_payment)

Оптимизировать по обстановке (за период, или выбирать только с PK > $id_start)
итд
p.s. если в вопросе приводить структуру таблиц, есть шанс получить более конкретный ответ.

Немного неверно описал похоже вторую таблицу.

Один ко многим.

1 таблица

|bid_id|title|status|

----------------------

|1|первый|complete|

|2|второй|in_progress|

2 таблица

|act_id|bid_id|action|

------------------------

|43|1|opened|

|44|2|funded|

|45|1|closed|

Как видно из таблиц, для бида 1, не было статуса funded в таблице 2. Значит бид №1 должен быть в вытащенных данных, а второй - нет, так как для него есть в таблице действие funded.

IL
На сайте с 20.04.2007
Offline
435
#3

А имена таблиц тоже таблица1 и таблица2?

SELECT * from bid WHERE id
NOT IN (select DISTINCT id_bid from bid_payment)

Суть от этого не изменилась.. просто в условие проверку на `action`='funded' добавить нужно.

G
На сайте с 24.10.2009
Offline
51
#4
ivan-lev:
А имена таблиц тоже таблица1 и таблица2?



Суть от этого не изменилась.. просто в условие проверку на `action`='funded' добавить нужно.

Да. :) На самом деле я это понял уже из первого ответа. :) Спасибо вам большое!

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий