Игорь_Vasinsky
20.01.2013 - 01:39
вообще был тут топик на прям = точь точь твоя тема - там и структура грамотная и запрос был - ой ой ой, великие умы голову ломали...
_____________
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
20.01.2013 - 01:40
Игорь_Vasinsky
Спасибо)
Я не знаю, в чем причина, но когда я писал IS NOT NULL- оно игнорировалось
Zzepish
20.01.2013 - 01:41
Игорь_Vasinsky
Я еще не эксперт, чтоб с типами баз разбиратся. Сейчас напишу свою работу по повышению квалификации, а по том и до оптимизации оберусь
Игорь_Vasinsky
20.01.2013 - 01:46
вообще ход мысли верный, но я бы сделал так
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
20.01.2013 - 01:47
Игорь_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
20.01.2013 - 01:48
Игорь_Vasinsky
Спасибо! Намотаю на ус ( очень полезное замечание)
Zzepish
20.01.2013 - 01:51
Вся запара начинается с выбором юзера по id, и сравнение с starter, и destination_user
Игорь_Vasinsky
20.01.2013 - 01:53
ну при работе с БД нужно внимательно подходить к архитектуре, чтобы потом не убить БД запросами или свой мозг))
в данном случае тебе нужно в запросе отсеять 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
20.01.2013 - 01:57
Игорь_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
20.01.2013 - 02:01
Цитата |
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
20.01.2013 - 02:03
Игорь_Vasinsky
Так я уже пробовал (просмотри посты выше, бросал).
ПОнимаешь, в чем дело- все ок, пока я не начинаю сравнивать id юзеров(отправителя и адресата). Вот тогда лезут NULL
Игорь_Vasinsky
20.01.2013 - 02:09
подожди. а зачем сравнивать юзеров? у тя у каждого сообщения есть свой канал - он есть в таблице + есть таблица каналов с 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
20.01.2013 - 02:11
Игорь_Vasinsky
Это приват!
Я должен удостоверится, что его видит только юзер с id `starter` или с id `destination_user`
Игорь_Vasinsky
20.01.2013 - 02:17
так для чего тебе идентификатор канала то?
он у тя должен быть уникален для каждой беседы.
в беседе у тя только 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
20.01.2013 - 02:22
Игорь_Vasinsky
Как так?
Участников сравниваю!
Каналы сравниваю!
Быстрый ответ:
Powered by dgreen
Здесь расположена полная версия этой страницы.