![]() |
Модераторы: skyboy, MoLeX, Aliance, ksnk |
![]() ![]() ![]() |
|
Alix36 |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 478 Регистрация: 6.11.2006 Репутация: 1 Всего: 3 |
Идея такая
в базе записывается сообщения в поле msg если оно приватное то перед текстом самого сообщения идет prv[NIK1]prv[NIK2]... В фрейме где выводятся сообщения нужно отобрать сообщения 1) Имеющие prv[NIK_U] NIK_U ник данного юсера. 2) Не имеющие вообще записи prv[**] Со вторым проблем нет просто проверяем на вхождение подфразу prv[ А вот с первым непонимаю как сделать.. -------------------- Наши лица как дым, И никто не узнает как мы победим. (С)Пикник. |
|||
|
||||
kasmanaft |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 94 Регистрация: 16.11.2007 Репутация: 1 Всего: 2 |
Можно воспользоваться регулярными выражениями:
PS в сообщение, наверное, добавьте разделитель, чтобы можно было легко отделять само сообщение от "системных команд". А потом explode(' |~|~| ', $text, 2). |
|||
|
||||
skyboy |
|
|||
неОпытный ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 9820 Регистрация: 18.5.2006 Где: Днепропетровск Репутация: 75 Всего: 260 |
kasmanaft, выдирать из БД все подряд, а потом обрабатывать на стороне РНР - не самое рациональное решение.
Alix36, укажи версию MySQL и приведи структуру таблицы(чтоб знать имена полей и писать запрос не "от балды"). |
|||
|
||||
Alix36 |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 478 Регистрация: 6.11.2006 Репутация: 1 Всего: 3 |
Не мог ответит раньше...
Структура такая. id|Autor|time|loc|tip|msg|zm Autor-ник напечатавшего сообщение time- время сообщения loc- комната в которой сказано tip- если сообщение администрации то tip=1 msg само сообщени zm - колличество замечание пользователя. Версия Базы 5.0.18 mysql -------------------- Наши лица как дым, И никто не узнает как мы победим. (С)Пикник. |
|||
|
||||
Валерия |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 598 Регистрация: 10.3.2007 Репутация: 3 Всего: 8 |
Я когда делала чат, я сделала маленькое поле "кому", если оно пустое - то всем
![]() И еще у меня одно поле было в базе, "to" и "private". Затем была выборка: SELECT * FROM `qwe` WHERE `to`='$mylogin' and `private`='1'; эти писались в нижний фрейм (приват) SELECT * FROM `qwe` WHERE `private`='0'; а эти в верхний фрейм, тоесть общак ![]() Хотя не знаю как ты хочешь что бы у тебя в чате было, мне, например, удобнее когда общак и приват раздельно. |
|||
|
||||
Alix36 |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 478 Регистрация: 6.11.2006 Репутация: 1 Всего: 3 |
Валерия, такое и щас существует.
Минусы 1.Нельзя группе приват написать, только одному человеку. 2.Сложный ввод. (Не все пользователи знают что таб переводит курсор в следущий инпут.) -------------------- Наши лица как дым, И никто не узнает как мы победим. (С)Пикник. |
|||
|
||||
Feldmarschall |
|
|||
Новичок ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 2641 Регистрация: 11.12.2007 Репутация: 22 Всего: 32 |
Мне кажется, автор не совсем понимает, что такое РСУБД. И использует её, как банальный текстовый файл с последовательным доступом. Отсюда все проблемы. |
|||
|
||||
Alix36 |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 478 Регистрация: 6.11.2006 Репутация: 1 Всего: 3 |
Feldmarschall, Может я конечно и не прав, но Ваше сообщение никакого отношения не имеет к теме, если вам хочется меня оскорбить, в ПМ.
Тут задают вопросы и принято на них отвечать, а не просто писать пустые сообщения имеющие неприятное для авторов тем содержание.
Кто Вам это сказал? Вопрос темы - рациональность того или иного способа. Я предложил такой. У Вас есть аргументы против, выскажите их. -------------------- Наши лица как дым, И никто не узнает как мы победим. (С)Пикник. |
|||
|
||||
HotHead |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 67 Регистрация: 26.10.2007 Репутация: 3 Всего: 4 |
В лоб можно решить через MySQL REGEXP или LIKE. Но такой метод будет очень тормозным. По хорошему разбор приватности сообщения надо делать до его попадания в БД, а не после. Ещё одно некрасивое, но быстрое решение - просмотреть начало сообщения на наличие prv[...] и для каждого встретившегося сделать свою запись в БД. Ещё придётся туда добавить поле 'to', как выше предлагала Валерия. При умеренной нагрузке такое решение терпимое, хотя и некрасивое.
Ну а по хорошему всё надо делать по классике жанра. Таблица юзеров с user_id, таблица сообщений с msg_id, таблица связей msg_to_user. В таблицу сообщений имеет смысл добавить флаг private и если сообщение не приватное, то и в таблицу связей ничего не писать. |
|||
|
||||
Alix36 |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 478 Регистрация: 6.11.2006 Репутация: 1 Всего: 3 |
HotHead, мощно, спасибо попробую последний вариант.
-------------------- Наши лица как дым, И никто не узнает как мы победим. (С)Пикник. |
|||
|
||||
Alix36 |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 478 Регистрация: 6.11.2006 Репутация: 1 Всего: 3 |
HotHead, возник такой вопрос.
Если я записываю согласно структуре Как правильнее всего выбирать записи. Я сделал так. 1.из таблицы id_msg выбираем все для данной комнаты (order by time ). 2. для каждого сообщения проверяем, если установлен приват, если установлен, делаем дополнительный запрос в msg_to_user и если в таблице есть запись о том, что данное сообщение адресовано и этому пользователю, мы его выводим, в ином случае нет. Можно ли сделать иначе? -------------------- Наши лица как дым, И никто не узнает как мы победим. (С)Пикник. |
|||
|
||||
Валерия |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 598 Регистрация: 10.3.2007 Репутация: 3 Всего: 8 |
Поле to удобно очень тем, что когда с одним общаешься в привате, не нужно каждый раз по его нику клацать.
А если еще отправку приватных сообщений через ctrl + enter сделать то вообще очень удобно ![]() |
|||
|
||||
Alix36 |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 478 Регистрация: 6.11.2006 Репутация: 1 Всего: 3 |
я с приватом так сделал, клацаешь по нику, устанавливается кукис с ником, и + отображается на панельке.
отправляешь с установленными куками - в приват, на панельке жмешь очистить приват , и шлешь сообщение - общее сообщение -------------------- Наши лица как дым, И никто не узнает как мы победим. (С)Пикник. |
|||
|
||||
Валерия |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 598 Регистрация: 10.3.2007 Репутация: 3 Всего: 8 |
А кукис то зачем
![]() |
|||
|
||||
Alix36 |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 478 Регистрация: 6.11.2006 Репутация: 1 Всего: 3 |
Валерия, дабы с сервера можно быо сразу читать, а не писатьфункцию по извлечению из слоя на JS
-------------------- Наши лица как дым, И никто не узнает как мы победим. (С)Пикник. |
|||
|
||||
Валерия |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 598 Регистрация: 10.3.2007 Репутация: 3 Всего: 8 |
||||
|
||||
HotHead |
|
||||
Шустрый ![]() Профиль Группа: Участник Сообщений: 67 Регистрация: 26.10.2007 Репутация: 3 Всего: 4 |
Alix36, я бы просто сделал две выборки. Одну общую (где приват = 0), вторую приватную (приват = 1) и к ней сразу JOIN'ом присоединил записи с соответствующим msg_id и адресованных данному юзеру (user_id = его_id). Потом просто выводим результаты выборок в соответствующее окно.
Т.е. у меня получилось бы примерно следующее:
для обычных сообщений (+ ORDER и LIMIT, если нужно). И
для приватных. В принципе проверку m.private = 1 можно не делать, т.к. в таблицу msg_to_user должны попадать только записи для приватных сообщений, но можно и попараноить на всякий случай. |
||||
|
|||||
Alix36 |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 478 Регистрация: 6.11.2006 Репутация: 1 Всего: 3 |
HotHead, спасибо
-------------------- Наши лица как дым, И никто не узнает как мы победим. (С)Пикник. |
|||
|
||||
![]() ![]() ![]() |
Правила форума "PHP" | |
|
Новичкам:
Важно:
Внимание:
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, IZ@TOP, skyboy, SamDark, MoLeX, awers. |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | PHP: Общие вопросы | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |