
Cate
22.11.2016
00:24:27
http://pastebin.com/cUuvuq1Y Стаститика
http://pastebin.com/8jXLJPwh Кампании
http://pastebin.com/guD5Vtdq Странная табличка соотвествий
Только такие дампы могут усугубить

Artur
22.11.2016
00:25:03
не нужны данные

Google

Cate
22.11.2016
00:25:16

Artur
22.11.2016
00:25:20
задача не мформулирована вообше никак

Cate
22.11.2016
00:26:24
Мне нужно чтоб апи выбирало только те кампании, которые не перечислены или перечислены в списке
апи выбирает тем запросом, что я прислала.

Artur
22.11.2016
00:27:09
ну и при чём тут
or cp.adv_campaign_id !=s.platform_id

Alexander
22.11.2016
00:28:58
я предлагаю декомпозировать задачу на мелкие, сделать через циклы и маленькие запросы, а потом отрефакторить уже
так будет понятнее

Cate
22.11.2016
00:29:24
LEFT JOIN adv_campaigns_platforms as cp
ON s.platform_id = cp.platform_id
Вот так было

Artur
22.11.2016
00:29:36

Cate
22.11.2016
00:29:51
Вот и я о чем

Google

Artur
22.11.2016
00:29:57
а в коде её повторить с тем же успехом не получится

Alexander
22.11.2016
00:30:13
ну, она по крайней мере понятна будет
что такое компания платформа, это метафизика какая-то

Artur
22.11.2016
00:30:30
я всё ещё не вижу задачи

Alexander
22.11.2016
00:31:13
это 2 таблички, связанные М:Н?
или нет?

Artur
22.11.2016
00:31:32
что такое мн
там один ко многим

Alexander
22.11.2016
00:31:43
ну, 1:1, 1:М, М:Н
типы связей

Artur
22.11.2016
00:31:59
или многие ко многим но нас интересует 1 сторона

Cate
22.11.2016
00:32:23

Alexander
22.11.2016
00:32:40
тогда JOIN ( https://ru.wikipedia.org/wiki/Join_(SQL) ) тут примеры

Artur
22.11.2016
00:32:44
и асудя по выводу там один ко многим но множество срезается условиями. остаётся 1:1 или 1:0

Cate
22.11.2016
00:34:04
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;
у меня вот.

Artur
22.11.2016
00:35:11

Google

Artur
22.11.2016
00:35:24
оу у меня описка
не платформа а компания

Cate
22.11.2016
00:38:09

Artur
22.11.2016
00:38:10
или так
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
WHERE s.id IS NULL
AND c.status=3
AND cp.adv_campaign_id IS NULL
AND s.type_id=3
AND s.uid='5'
AND s.platform_id=4
;
какой конкретно запрос не работает
ну ок...


Cate
22.11.2016
00:43:25
Ну скажем запрос то работает)


Cate
22.11.2016
00:43:25
ctrl=# SELECT c.*
ctrl-# FROM adv_campaigns c
ctrl-# LEFT JOIN statistics s
ctrl-# ON c.id=s.campaign_id
ctrl-# LEFT JOIN adv_campaigns_platforms as cp
ctrl-# ON s.platform_id = cp.platform_id
ctrl-# WHERE s.id IS NULL
ctrl-# AND c.status=3
ctrl-# AND cp.adv_campaign_id IS NULL
ctrl-# AND s.type_id=3
ctrl-# AND s.uid='5'
ctrl-# AND s.platform_id=4;
id | title | short_description | description | age | price1 | price2 | created_at | updated_at | hour_limit | day_limit | week_limit | month_limit | general_limit | date_start | date_end | live_traffic | time_interval | image_data | brief | url | city | country | status | uuid | secret | original_offer_id | deleted_at | pixel_toggle | user_id | region | campaign_type | platform_type | integration_stat_url | age_unknown | gender | provider_id | social | web2mobile | datatype | redirect_url | vk_url | task_types | mobile_type | mobile
—--+-------+-------------------+-------------+-----+--------+--------+------------+------------+------------+-----------+------------+-------------+---------------+------------+----------+--------------+---------------+------------+-------+-----+------+---------+--------+------+--------+-------------------+------------+--------------+---------+--------+---------------+---------------+----------------------+-------------+--------+-------------+--------+------------+----------+--------------+--------+------------+-------------+------—
(0 rows)


Artur
22.11.2016
00:45:19
а должно быть не 0?

Cate
22.11.2016
00:45:23
Только в моем случае он выводит 4 кампании, в твоем 0, в идеале должен штук 50 показывать.

Alexander
22.11.2016
00:45:52
он скрытный)

Artur
22.11.2016
00:45:54
так при чём тут "в моём случае". я ж говорю я сделал условия что ты просила )

Cate
22.11.2016
00:46:20
щас проаапдэйчу..

Artur
22.11.2016
00:46:49

Google

Artur
22.11.2016
00:48:54
adv_campaign_id = null
это ж дичь
http://pastebin.com/guD5Vtdq


Cate
22.11.2016
00:49:26
ctrl=# \d adv_campaigns_platforms;
Table "public.adv_campaigns_platforms"
Column | Type | Modifiers
—---------------+---------+---------—
adv_campaign_id | integer |
platform_id | integer |
Indexes:
"index_campaigns_platforms" UNIQUE, btree (adv_campaign_id, platform_id)
Это мне программист сделал.

Artur
22.11.2016
00:49:56
напрашивается not null на оба поля

Cate
22.11.2016
00:50:33
забавно. я проапдэйтила табличку. в ней нет ни одной кампании с такими условиями как в запросе.

Artur
22.11.2016
00:50:46
или это флаг "пустых" компаний?

Admin
ERROR: S client not available

Cate
22.11.2016
00:51:13
adv_campaign_id | platform_id
—---------------+-------------
187 | 6
188 | 6
188 | 5
188 | 7
| 5
| 5
| 6
| 5
| 6
10 | 5
10 | 6
| 1000
| 1000
| 1000
| 1000
| 1000
| 1000
| 1000
| 1000
| 1000
| 1000
| 1000
| 1000
| 1000

Artur
22.11.2016
00:51:20
один фиг у тебя они не уникальные
"index_campaigns_platforms" UNIQUE, btree (adv_campaign_id, platform_id)
| 4
| 4
из-за null

Cate
22.11.2016
00:51:30
Я знаю почему так.

Artur
22.11.2016
00:51:44
я не вижу причин чтобы было так

Cate
22.11.2016
00:51:56
ну он так вот сделал.

Artur
22.11.2016
00:52:26
а если бы хирург тебе "ну так сделал"?

Alexander
22.11.2016
00:53:02
по-моему, там все хороши)

Artur
22.11.2016
00:53:20
а здесь без логики связей полей ничего не сделать


Cate
22.11.2016
00:54:03
ну у нас наоборот. запись есть - флажок стоит, нет - не стоит.
если флажок снять cp.adv_campaign_id становится NULL

Google

Artur
22.11.2016
00:54:43

Alexander
22.11.2016
00:54:56
я могу понять программиста, который сделал всё плохо потому что ему не поставили чёткое ТЗ, последние 2,5 часа тут что-то происходит и только 3 человека понимают, что именно)

Cate
22.11.2016
00:55:20
Флажочки вот)

Alexander
22.11.2016
00:55:30
дай структуру таблиц

Artur
22.11.2016
00:55:32
я тебе не про флажки
а про ошибку в логике проектирования вне зависимости от поставленной задачи

Alexander
22.11.2016
00:55:47
не данные, а вот CREATE TABLE эти

Cate
22.11.2016
00:55:49

Artur
22.11.2016
00:55:52

Cate
22.11.2016
00:55:56
после таких такой шлак в бд

Artur
22.11.2016
00:56:24
шлак он не в пхпмайадминах :)

Cate
22.11.2016
00:56:38
Table "public.adv_campaigns_platforms"
Column | Type | Modifiers
—---------------+---------+---------—
adv_campaign_id | integer |
platform_id | integer |
Indexes:
"index_campaigns_platforms" UNIQUE, btree (adv_campaign_id, platform_id)
Вот она

Artur
22.11.2016
00:58:13
нормально плати, нормально будет (с) :)

Alexander
22.11.2016
00:58:28
ну, вообще сначала рисуют типа такого https://habrastorage.org/files/de3/ed5/b3e/de3ed5b3e150493c8d4d4e3fb82bf8ad.png

Cate
22.11.2016
00:59:10
год назад правд

Alexander
22.11.2016
00:59:48
и тут по линиям и концам понятно, NULL / NOT NULL, 1:M, 1:1, M:N