[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Не могу составить архитектуру (или запрос)
Страницы: 1, 2, 3, 4
Игорь_Vasinsky
вообще был тут топик на прям = точь точь твоя тема - там и структура грамотная и запрос был - ой ой ой, великие умы голову ломали...



_____________
HTML, CSS (Bootstrap), JS(JQuery, ExtJS), PHP, MySQL, MSSql, Posgres, (TSql, BI OLAP, MDX), Mongo, Git, SVN, CodeIgnater, Symfony, Yii 2, JiRA, Redmine, Bitbucket, Composer, Rabbit MQ, Amazon (SQS, S3, Transcribe), Docker
Zzepish
Игорь_Vasinsky
Спасибо)
Я не знаю, в чем причина, но когда я писал IS NOT NULL- оно игнорировалось
Zzepish
Игорь_Vasinsky
Я еще не эксперт, чтоб с типами баз разбиратся. Сейчас напишу свою работу по повышению квалификации, а по том и до оптимизации оберусь
Игорь_Vasinsky
вообще ход мысли верный, но я бы сделал так

channels: chid | from_id | to_id

users: uid | nick

messages: mid | channel_id | date_time | title | text | status

статус: удалено, спам, жалоба, промодерировано

таблица channels - не только обеспечить "вечную историю" переписки по запросу, но и даст возможность избежания хранения инфу об отправители и получателе в таблице messages



_____________
HTML, CSS (Bootstrap), JS(JQuery, ExtJS), PHP, MySQL, MSSql, Posgres, (TSql, BI OLAP, MDX), Mongo, Git, SVN, CodeIgnater, Symfony, Yii 2, JiRA, Redmine, Bitbucket, Composer, Rabbit MQ, Amazon (SQS, S3, Transcribe), Docker
Zzepish
Игорь_Vasinsky

SELECT *
FROM `user_channels` `uc`
LEFT JOIN
`chat` `c`
ON
`uc`.`channel_id` = `c`.`channel`
WHERE
`c`.`channel` IS NOT NULL
AND

`uc`.`channel_id`="2"
AND
`uc`.`starter`="1"
OR
`uc`.`destination_user`="1"


Дает сбой! Вторая строка содержит NULL/

Даже так не убирается NULL

SELECT *
FROM `user_channels` `uc`
LEFT JOIN `chat` `c` ON `uc`.`channel_id` = `c`.`channel`
WHERE `c`.`channel` IS NOT NULL
AND
`uc`.`channel_id` = "2"
AND `uc`.`starter` = "1"
OR `uc`.`destination_user` = "1"
AND `uc`.`starter` IS NOT NULL
AND
`uc`.`destination_user` IS NOT NULL
Zzepish
Игорь_Vasinsky
Спасибо! Намотаю на ус ( очень полезное замечание)
Zzepish
Вся запара начинается с выбором юзера по id, и сравнение с starter, и destination_user
Игорь_Vasinsky
ну при работе с БД нужно внимательно подходить к архитектуре, чтобы потом не убить БД запросами или свой мозг))

в данном случае тебе нужно в запросе отсеять 3 поля на is not null - id канала, отправителя и получателя.

_____________
HTML, CSS (Bootstrap), JS(JQuery, ExtJS), PHP, MySQL, MSSql, Posgres, (TSql, BI OLAP, MDX), Mongo, Git, SVN, CodeIgnater, Symfony, Yii 2, JiRA, Redmine, Bitbucket, Composer, Rabbit MQ, Amazon (SQS, S3, Transcribe), Docker
Zzepish
Игорь_Vasinsky
Такое тоже не работает

SELECT *
FROM `user_channels` `uc`
LEFT JOIN
`chat` `c`
ON
`uc`.`channel_id` = `c`.`channel`
WHERE
`c`.`channel` IS NOT NULL
AND

`uc`.`channel_id`="'.$channel.'"
AND
`uc`.`starter`="'.$personal_info['id'].'" IS NOT NULL
OR

`uc`.`destination_user`="'.$personal_info['id'].'" IS NOT NULL

В смысле- не отсеивает! Сам запрос работает
Игорь_Vasinsky
Цитата
AND
        `uc`.`starter`="'.$personal_info['id'].'" IS NOT NULL
        OR
        `uc`.`destination_user`="'.$personal_info['id'].'" IS NOT NULL


хитро)

а так

AND
`uc`.`starter`="'.$personal_info['id'].'" AND `uc`.`starter` IS NOT NULL
OR

`uc`.`destination_user`="'.$personal_info['id'].'" AND `uc`.`destination_user` IS NOT NULL



вообще пока не начались дебри (а они начинаются) - пересмотри предложенную мной структуру - тогда от этих строк у тя голова болеть не будет
нужно будет только channel_id выцеплять - а по нему всё будет вылазить.

у каждой беседы кто-кому свой канал



_____________
HTML, CSS (Bootstrap), JS(JQuery, ExtJS), PHP, MySQL, MSSql, Posgres, (TSql, BI OLAP, MDX), Mongo, Git, SVN, CodeIgnater, Symfony, Yii 2, JiRA, Redmine, Bitbucket, Composer, Rabbit MQ, Amazon (SQS, S3, Transcribe), Docker
Zzepish
Игорь_Vasinsky
Так я уже пробовал (просмотри посты выше, бросал).
ПОнимаешь, в чем дело- все ок, пока я не начинаю сравнивать id юзеров(отправителя и адресата). Вот тогда лезут NULL
Игорь_Vasinsky
подожди. а зачем сравнивать юзеров? у тя у каждого сообщения есть свой канал - он есть в таблице + есть таблица каналов с id юзеров

_____________
HTML, CSS (Bootstrap), JS(JQuery, ExtJS), PHP, MySQL, MSSql, Posgres, (TSql, BI OLAP, MDX), Mongo, Git, SVN, CodeIgnater, Symfony, Yii 2, JiRA, Redmine, Bitbucket, Composer, Rabbit MQ, Amazon (SQS, S3, Transcribe), Docker
Zzepish
Игорь_Vasinsky
Это приват!
Я должен удостоверится, что его видит только юзер с id `starter` или с id `destination_user`
Игорь_Vasinsky
так для чего тебе идентификатор канала то?
он у тя должен быть уникален для каждой беседы.

в беседе у тя только 2 участника.

получается ты не пользуешься тем что у тя указывает на конкретность диалога в 2х таблицах)

_____________
HTML, CSS (Bootstrap), JS(JQuery, ExtJS), PHP, MySQL, MSSql, Posgres, (TSql, BI OLAP, MDX), Mongo, Git, SVN, CodeIgnater, Symfony, Yii 2, JiRA, Redmine, Bitbucket, Composer, Rabbit MQ, Amazon (SQS, S3, Transcribe), Docker
Zzepish
Игорь_Vasinsky
Как так?
Участников сравниваю!
Каналы сравниваю!
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.