
Александр
21.11.2016
23:04:57
Возможно что-то и поменялось и теперь можно использовать, я не знаю честно говоря.

Cate
21.11.2016
23:04:59
в логах покажут.
я не понимаю что эти парамсы делают
#{where}", params[:uid], platform.id])

Google

Cate
21.11.2016
23:05:48
ах ах.

Александр
21.11.2016
23:06:28
У тебя тело запроса и рубикод вместе я хз

Cate
21.11.2016
23:06:34
это то, что подставляется вместо ? наверное.

Александр
21.11.2016
23:07:04
@offers = AdvCampaign.find_by_sql ([" ", params[:uid], platform.id])
это код руби
mysql я вырезал
Но я так подозреваю, что ты права и эти данные подставляются из функций кода руби

Cate
21.11.2016
23:08:49
просто ребята в руби чати сказали что так глупые люди подставляют.
AdvCampaign.find_by_sql (
[
"SELECT c.* FROM adv_campaigns c left join adv_campaigns_platforms cp ON cp.adv_campaign_id = c.id WHERE AND cp.platform_id != :platform_idLEFT JOIN statistics s ON c.id=s.campaign_id AND s.type_id=#{STATS_TYPE_APPROVAL} AND s.uid=:uid AND s.platform_id=:platform_id",
{
uid: params[:uid],
platform_id: platform.id
}
]
надо не так джойнить.

Александр
21.11.2016
23:10:19
Ты можешь вообще join не использовать, а делать всё селектом
:D
Может проблема в том, что у тебя where стоит в середине join'ов? :D

Google

Cate
21.11.2016
23:11:45
@offers = AdvCampaign.find_by_sql (["SELECT c.* FROM adv_campaigns c
LEFT JOIN statistics s
ON c.id=s.campaign_id
AND s.type_id=#{STATS_TYPE_APPROVAL}
AND s.uid=?
AND s.platform_id=?
WHERE s.id IS NULL
AND c.status=3
LEFT JOIN adv_campaigns_platforms as cp
ON s.platform_id = cp.platform_id
WHERE cp.adv_campaign_id IS NULL
#{where}", params[:uid], platform.id])
вообще проблему я уже нашла, я не тот запрос правила))
у меня же их два аналогичных))

Александр
21.11.2016
23:12:10
Молодец. ?

Cate
21.11.2016
23:12:22
но мне же надо этот толково составить)
а как же не джойнить?
вот сейчас хорошо выглядит.
@offers = AdvCampaign.find_by_sql (["SELECT c.* FROM adv_campaigns c
LEFT JOIN statistics s
ON c.id=s.campaign_id
LEFT JOIN adv_campaigns_platforms as cp
ON s.platform_id = cp.platform_id
AND s.type_id=#{STATS_TYPE_APPROVAL}
AND s.uid=?
AND s.platform_id=?
WHERE s.id IS NULL
AND c.status=3
AND cp.adv_campaign_id IS NULL
#{where}", params[:uid], platform.id])
так может..

Александр
21.11.2016
23:16:15
Я твою тарабарщину не понимаю :D зачем нул?

Cate
21.11.2016
23:17:42
ну если там будет ноль - то данные получим, а если не будет ноль - то не получим, верно ведь?

Александр
21.11.2016
23:18:00
а null это 0? Не знал :D

Cate
21.11.2016
23:18:12
почему ноль?

Александр
21.11.2016
23:19:54
Я просто не понимаю к чему про 0? Если в строке 0, то и like 0 или not like 0

Cate
21.11.2016
23:23:49
там в строке пустота
но это int
SELECT c.* FROM adv_campaigns c
LEFT JOIN statistics s
ON c.id=s.campaign_id
LEFT JOIN adv_campaigns_platforms as cp
ON s.platform_id = cp.platform_id
AND s.type_id=3
AND s.uid='5'
AND s.platform_id=4
WHERE s.id IS NULL
AND c.status=3
AND cp.adv_campaign_id IS NULL;
Вот так - работает.

Александр
21.11.2016
23:25:24
Голый запрос работает, а в коде не работает? Потому что я не вижу разницы между запросами
Я правильно понял?

Google

Cate
21.11.2016
23:27:24
я пытаюсь его составить, для начала.
всеголишь)

Александр
21.11.2016
23:28:26
А чего в код лезешь тогда :D
Не понимаю я этих женщин(
Пиши что у тебя сейчас не выводится в запросе?


Cate
21.11.2016
23:31:02
Мне к запросу надо добавить кусочек, чтоб отфильтровать лишнее.
SELECT c.* FROM adv_campaigns c
LEFT JOIN statistics s
ON c.id=s.campaign_id
AND s.type_id=3
AND s.uid='5'
AND s.platform_id=4
WHERE s.id IS NULL
AND c.status=3
Это изначальный запрос.
Это соседняя табличка
ctrl=# \d adv_campaigns_platforms;
Table "public.adv_campaigns_platforms"
Column | Type | Modifiers
—---------------+---------+---------—
adv_campaign_id | integer |
platform_id | integer |
В ней такое содержимое
adv_campaign_id | platform_id
—---------------+-------------
186 | 4
187 | 6
188 | 6
188 | 5
188 | 7
188 | 4
| 4
| 5
| 4
| 5
| 6
| 4
| 5
| 6
10 | 5
10 | 6
| 4
25 | 4
| 4
27 | 4
33 | 4
39 | 4
44 | 4
126 | 4
195 | 4
| 4
| 4
235 | 4
| 4
197 | 4
| 4
| 4
| 4
| 4
| 4
| 4
208 | 4
| 4
| 4
| 4
| 4
| 4
| 4
| 4
| 4
| 4
217 | 4
| 4
| 4
| 4
209 | 4
| 4
| 4
| 4
206 | 4
Мне же нужно вот что, если в этой соседней табличке есть в platform_id есть s.platform_id, но adv_campaign_id != s.campaign_id то выводить, а если равен то не выводить.


Cate
21.11.2016
23:34:58
Саша. а запрос то этот не цикличен.

Nikolay
21.11.2016
23:36:32
намана
простыня в чатике

Александр
21.11.2016
23:40:38

Alexander
21.11.2016
23:40:49
это вопрос про sql, имеет смысл спросить в чатиках, связанных с субд
там лучше ответят

Cate
21.11.2016
23:40:53
Пустота.
adv_campaign_id | platform_id
—---------------+-------------
186 | 4
187 | 6
188 | 6
188 | 5
188 | 7
188 | 4
| 4
| 5
| 4
| 5
| 6
| 4
| 5

Google

Александр
21.11.2016
23:41:12
т.е. в s.campaign_id, как ты показала есть, а в adv_campaign_id?
Так стоп
наоборот
:D
s.campaign_id есть null?

Cate
21.11.2016
23:42:44
не не. я тебе cp. показала.
WHERE s.id IS NULL - эту строку мы не трогаем.

Александр
21.11.2016
23:43:10
женщина прекрати :D

Cate
21.11.2016
23:43:13
она уже была и хорошо себя зарекомендовала))
в статистике ее может не быть. такой строки с таким id

Admin
ERROR: S client not available

Cate
21.11.2016
23:44:53
вообще.
ctrl=# \d statistics;
Table "public.statistics"
Column | Type | Modifiers
—----------------+-----------------------------+---------------------------------------------------------
id | integer | not null default nextval('statistics_id_seq'::regclass)
views | integer | not null default 0
views_uniques | integer | not null default 0
clicks | integer | not null default 0
leads | integer | not null default 0
assigns | integer | not null default 0
created_at | timestamp without time zone | not null
updated_at | timestamp without time zone | not null
campaign_id | integer | not null
click_uniques | integer | not null default 0
Они никогда не могут быть нулями.
но их может не быть впринципе.

Alexander
21.11.2016
23:47:03
я бы предложил сначала сделать тестовую базу, задеплоить куда-нибудь, набить тестовыми данными, потом поставить задачи (а как мне сделать запрос ... описание запроса) по пунктам и уже это скинуть в чат сюда и в чаты по субд

Александр
21.11.2016
23:47:55
А теперь у меня вопрос, нахуя ты в запросе просишь выводить AND cp.adv_campaign_id IS NULL ????
Если тебе эти значения не нужны.
:D

Alexander
21.11.2016
23:48:11
если это mysql, то какой-нибудь phpmyadmin, если postgres - phppgadmin, дать доступ на чтение ну и все зайдут потыкать твою базу

Google

Александр
21.11.2016
23:48:43
where cp.adv_campaign_id IS NULL
зачем оно тебе?

Cate
21.11.2016
23:48:55
погоди.
ты путаешь.
тут три таблицы.

Александр
21.11.2016
23:49:18
я вижу 3 таблицы

Cate
21.11.2016
23:49:45
adv_campaigns = c
statistics = s
adv_campaigns_platforms as cp
а.

Александр
21.11.2016
23:50:11
Угу
Что а?

Cate
21.11.2016
23:50:19
я поняла. Я не с тем сравниваю.

Александр
21.11.2016
23:50:24
:D

Cate
21.11.2016
23:51:06
Но нет.
SELECT c.*, cp.* FROM adv_campaigns c
LEFT JOIN statistics s
ON c.id=s.campaign_id
LEFT JOIN adv_campaigns_platforms as cp
ON s.platform_id = cp.platform_id
AND s.type_id=3
AND s.uid='5'
AND s.platform_id=4
WHERE s.id IS NULL
AND c.status=3
AND cp.adv_campaign_id IS NULL;

Nikolay
21.11.2016
23:51:08
спааайсы

Александр
21.11.2016
23:51:34
Смотри ещё раз у тебя 2 таблицы
третью не берем

Cate
21.11.2016
23:51:40
три

Nikolay
21.11.2016
23:51:42
время 4 утра; почему бы не бмазаться скулем, действительно

Дмитрий
21.11.2016
23:51:55
?

Александр
21.11.2016
23:51:57
у тебя две таблицы s.platform_id = cp.platform_id

Cate
21.11.2016
23:52:01

Александр
21.11.2016
23:52:01
Я про эту часть