X   Сообщение сайта
(Сообщение закроется через 3 секунды)



 

Здравствуйте, гость (

| Вход | Регистрация )

Открыть тему
Тема закрыта
> Создание ффекта непрочитаные письма
yuriy_hb
yuriy_hb
Topic Starter сообщение 3.6.2010, 1:51; Ответить: yuriy_hb
Сообщение #1


Здравствуйте Всем!
Задался целью создать наподобия почтового ящика личный кабинет на который вместе приходящих писем будут приходить заявки на запчасти к авто.
Но вот есть одна небольшая проблема.
Заявки приходят, но нужно как-то сделать, чтобы помечать непросмотреные (непрочитаны) заявки одним цветом (жирным шрифтом и т.д) , а уже раньше просмотреные - другим, ну наподобие почтового ящика, чтобы можно было различать что уже смотрел, а что нет.

Пытался создать в БД отдельную таблицу в которой хранились все заявки, и напротив каждой заявки ставил 0 - если непрочитаное или - 1 если уже просмотрено.
Но оказалося что это очень сильно загружает сервер и выборка из БД происходит очень медлено а временами даже виснит... (заявок приходит очень много и для каждого пользователя нужно указать свои настройки относительно статуса каждой заявки... Может существует какой-то инной механихм разграничения?

Хотелось создать как на почтовике mail.ru - там очень хорошо сделано, но вот как это сделано, пока не могу понять...


Буду благодарен за подсказку и помощь!!!
0
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
Licoric
Licoric
сообщение 3.6.2010, 4:59; Ответить: Licoric
Сообщение #2


Опционально можешь использовать куки, но это не снимет нагрузку на сервер. Но я бы добавил к текущей таблице заявок доп поле с параметрами 0/1 (визибл-инвизибл)? а не отдельную таблицу. Дабы в одном запросе узнавать всю необходимую информацию. (where visible = `1`).

Да и какие значения (количество) у вас там в базе, что она виснуть может?
- Вынесите ее на отдельный серв. Если заказов много, то деньги наверняка есть. Сервер взять сможете, думаю. Если начальство ограничивает финансы, то я бы целенаправленно не стал ничего оптимизировать. Очень часто "оно" хочет "поисковик, как гугл. неделя на разработку". Надо бороться за здравый смысл.
- оптимизируйте таблицу (записи старше 2-4 месяцев удаляйте). Если записи нужны - переносите в базу "архив. не удалять" )))
- нет, думаю, особого смысла держать всё за последние *цать лет в одной базе. Особенно если используется 3-4% от базы (я образно).
- заархивируйте часть базы и удалите ее. При необходимости - локальная машина, денвер + простой скрипт вам помогут.

Как бы вопрос то уже решен. Проблема только в тормозах сервера. Вот с этого и начните.
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
yuriy_hb
yuriy_hb
Topic Starter сообщение 3.6.2010, 8:44; Ответить: yuriy_hb
Сообщение #3


Я уже далал так, но проблема в том, что заявок очегь много. Запрос и ответ происходит с помощью Ajax. Сценарий на сервере долго делает выборку, (время ожидания ответа превышает 10-12с), что порождает неудобство. Может нужно вместо Ajax использовать обычную перезагрузку страницы, может это ускорит работу?
И еще.
В текущей таблице заявок создать можно отделную колонку где будет проставлятся статус заявки 0/1. Но как это сделать если нужно отдельно для каждого пользователя устанавливать свои настройки касательно заявок.

К примру: Есть 6 таблиц (легковые, грузовые, автобусы...). В каждой таблице находятся заявки на запчасти для определенного типа авто:

Если я к примеру добавлю еще один столбец к каждой з таблиц, который будет отвечать за статус заявки, то даные настройки будут применены только к одному пользователю. А Если их 100 или 1000 пользователей, как тогда повязать с каждым пользователем свои настройки касательно каждой заявки расположеной в 6 отдельных таблицах.??? Вот в чем проблема у меня, нужно ведь для каждого пользователя указывать свои настройки (одни просмотрели заявкуЮ другие нет). Как тогда и где все это проописывать?
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
ZhukV
ZhukV
сообщение 3.6.2010, 8:46; Ответить: ZhukV
Сообщение #4


(yuriy_hb @ 3.6.2010, 04:51) *
Но оказалося что это очень сильно загружает сервер и выборка из БД происходит очень медлено а временами даже виснит...

Впервые такое слышу. Сколько работаю с мускулой, как через ПХП, так и через соманд строку, проблем не было с такой выборкой никаких. Мускула вилится только при использовании внутренних функций. Сервер, тоесть АПАЧ, больше всего может валить только ПХП, так что те нужно оптимизировать код.
В таблице, там где письма создай поле `if_view` типа ENUM со значением '0','1'
А при выдорке просто. Вытаскиваеш все, и проверяеш по этому полю:
[PHP]
$SQL = "SQLECT * FROM `mail`";
$R = mysql_query($SQL);

while($RESULT = mysql_fetch_array()){
if($RESULT['if_view']){
echo "<b>" . $RESULT['title'] . "</b>";
}else{
echo $RESULT['title'];
}
}
[/PHP]

P.S.
У меня на сайте в одной таблице около 200 000 записей (оголошення) http://freeboard.km.ua/ На странице ПОШУК есть форма поиска. Вытаскивается все из одной таблицы, траблов сос скоростью исполнение нет никаких. Скорость запроса составляет не более 1 секунды.
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
yuriy_hb
yuriy_hb
Topic Starter сообщение 3.6.2010, 9:16; Ответить: yuriy_hb
Сообщение #5


В таблице, там где письма создай поле `if_view` типа ENUM со значением '0','1'...

Это понятно, что для каждой заявки нужно указать ее статус (0/1). Но как быть если этот статус нужно установить для каждого зарегестрированого пользователя, чтобы каждый из них видел свои новые письма. Ведь один пользователь может просмотреть заявку, другой нет... и нужно это значение 0/1 привязывать конкретно к каждому вошедшему в систему. Одним полем не решишь проблему, наверное нужно создавать отдельную таблицу, где будут хранится все заявки и все пользователи... это опять идет ду***ж информации и рост строк в таблице. Просудите сами, если пользователей 1000 чел. Заявок 5000 и для каждого пользователя нужно по своему отмечать статус заявки, то умножая получаем 5000000 строк в таблице... не катит....
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
ZhukV
ZhukV
сообщение 3.6.2010, 9:26; Ответить: ZhukV
Сообщение #6


Не понял......
Что, куча пользователей сможет читать одну и туже заявку?
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
unnormal
unnormal
сообщение 3.6.2010, 9:43; Ответить: unnormal
Сообщение #7


(yuriy_hb @ 3.6.2010, 11:44) *
Я уже далал так, но проблема в том, что заявок очегь много. Запрос и ответ происходит с помощью Ajax. Сценарий на сервере долго делает выборку, (время ожидания ответа превышает 10-12с), что порождает неудобство. Может нужно вместо Ajax использовать обычную перезагрузку страницы, может это ускорит работу?

Проблема скорее всего в кривости php скриптов, а в частности можно уменьшить частоту ajax обновлений страницы, ну или отптимизировать их (предпроверять изменилось ли кол-во писем, что бы постоянно не отправлять полную информацию)

Лучше скинь код обновления списка писем.
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
yuriy_hb
yuriy_hb
Topic Starter сообщение 3.6.2010, 11:25; Ответить: yuriy_hb
Сообщение #8


(ZhukV @ 3.6.2010, 12:26) *
Не понял......
Что, куча пользователей сможет читать одну и туже заявку?


Разясню алгоритм работмы:
пользователь (продавец з/ч) должен зарегится на сайте, после чего попадпет в личный кабинет, в котором и появляется список всех поступивших заявок.
Новые непрочитаные заявки дожны выделятся особым цветом (к примеру синим), а вот прочитаные (промсотрены уже) другим цветом (красным).
Тоисть каждый зарегестрированый пользователь просматривает все заявки находящиеся в БД, но вот касательно того, просмотрел он конкретно выбраную заявку или нет будет зависит статус отображения. К примеру есть заявка №107А. Я как продавец просмотрел ее и она выделилась зеленым цветом, а Вы, тоже как продавец решили не просматривать эту самую заявку №107А и она у Вас выделяется синим цветом, до тех пор пока Вы не клацнете ее и не просмотрите.... (обычный пример почтовика на mail.ru - письмо остается выделеным жирным шрифтом до тех пор пока пользователь не просмотрит его), думаю замысел всем понятен.
Количество зарегестриованих пользователей и для каждого пользователя в зависемости просмотрел он эту заявку или нет будет выделятся особым цветом.

Програмная часть состоит из следущего:
Есть 6 таблиц в которых хранятся даные о запчастях (легковые, грузовые...)
Есть РНР сценарий который извлекает даные из этих 6-ти таблиц и затем соединяет их воедино и выдает готовый результат.

Кроме это есть еще одна таблица в которой хранятся список всех заявок для каждого отельного пользователя (додаю в приложение). В этой таблице поле state отображается статус заявки (прочинато/непрочитано 0/1).
Получается если у нас 10 зарегестированых пользоавтелей и 100 заявок, то для каждого пользователя нужно будет указывать свой статус заявки (получатся ду***ж информации, как приведдено в табл.)

Привожу код РНР:
[PHP]
//пробегаемся цыклом по каждой таблице заявок и делаем выборку
while($rowFilter = mysql_fetch_assoc($sql))
{

/если именем таблицы является oderAuto (легковые автмобили)
if($rowFilter['name'] == "oderAuto")
{
$$dh[] = SELECT
$rowFilter[name].request as request,
$rowFilter[name].type as typeauto,
$rowFilter[name].groupZapch as groupzapch,
$rowFilter[name].data as data,
$rowFilter[name].timenow as timenow,
markaauto.marka as marka,
modelauto.model as model,
groupzap.group as gr,
region.city as city,
supportState.bookMark as bookMark

FROM
$rowFilter[name],
markaauto,
modelauto,
groupzap,
region,
supportState

WHERE
$rowFilter[name].marka = markaauto.id_Marka and
$rowFilter[name].model = modelauto.id_Model and
$rowFilter[name].groupZapch = groupzap.idGroup and
$rowFilter[name].region = region.id_REG and
$rowFilter[name].request = supportState.request and
supportState.email = '$_SESSION[email]'";

}

//если именем таблицы являются другие типы авто (грузовые, автобусы. мототехника, спецтехника и прочие
elseif($rowFilter['name'] != "oderAuto")
{

$dh[] = "SELECT
$rowFilter[name].request as request,
$rowFilter[name].type as typeauto,
$rowFilter[name].groupZapch as groupzapch,
$rowFilter[name].data as data,
$rowFilter[name].timenow as timenow,
markaauto.marka as marka,
$rowFilter[name].model as model,
groupzap.group as gr,
region.city as city,
supportState.bookMark as bookMark
FROM
$rowFilter[name],
markaauto,
groupzap,
region,
supportState
WHERE
$rowFilter[name].marka = markaauto.id_Marka and
$rowFilter[name].groupZapch = groupzap.idGroup and
$rowFilter[name].region = region.id_REG and
$rowFilter[name].request = supportState.request and
supportState.email = '$_SESSION[email]'";
}
}

$dos = implode(" union all ", $dh);
$result = mysql_query($dos);
while ($row = mysql_fetch_assoc($result))
{
$blockTD = "<td onclick=\"bookMark('$row[request]', $page)\"><img src='../images/$img' width='15' height='14' alt='BookMarka' title='Сделать пометку по заявке $row[request] '></td>
<td onclick=\"document.location.href='views-$row[request]-$row[typeauto]-$row[groupzapch]-$page'\" title='Просмотр заявки $row[request]'>$row[request]</td>
<td onclick=\"document.location.href='views-$row[request]-$row[typeauto]-$row[groupzapch]-$page'\" title='Просмотр заявки $row[request]'>$row[marka]</td>
<td onclick=\"document.location.href='views-$row[request]-$row[typeauto]-$row[groupzapch]-$page'\" title='Просмотр заявки $row[request]'>$row[model]</td>
<td onclick=\"document.location.href='views-$row[request]-$row[typeauto]-$row[groupzapch]-$page'\" title='Просмотр заявки $row[request]'>$row[gr]</td>
<td onclick=\"document.location.href='views-$row[request]-$row[typeauto]-$row[groupzapch]-$page'\" title='Просмотр заявки $row[request]'>$row[city]</td>
<td onclick=\"document.location.href='views-$row[request]-$row[typeauto]-$row[groupzapch]-$page'\" title='Просмотр заявки $row[request]'>$row[data]</td>";


//Помечаем прочитаные заявки серым цветом, а непрочитаные черным
$res_support = mysql_query("SELECT * FROM supportState WHERE request = '$row[request]' and email = '$_SESSION[email]'");
while ($row_sup = mysql_fetch_assoc($res_support))
{
if($row_sup['state'] == 0 and $row_sup['answer'] == 0) //если заявка непросмотрена и ответ недан
{
if ($count%2 != 0) {
$listAnswer[] = "<tr class='fon_new_2'>$blockTD</tr>\n";
$count++; }
else {
$listAnswer[] = "<tr class='fon_new_1'>$blockTD</tr>\n";
$count++; }
}
elseif($row_sup['state'] == 1 and $row_sup['answer'] == 0) //если просмотрена заявка, но ответ недан
{
if ($count%2 != 0) {
$listAnswer[] = "<tr class='fon_request_2'>$blockTD</tr>\n";
$count++; }
else {
$listAnswer[] = "<tr class='fon_request_1'>$blockTD</tr>\n";
$count++; }
}
else //если просмотрена заявка и на нее дан ответ продавцом
{
if ($count%2 != 0) {
$listAnswer[] = "<tr class='fon_read_2'>$blockTD</tr>\n";
$count++; }
else {
$listAnswer[] = "<tr class='fon_read_1'>$blockTD</tr>\n";
$count++; }
}
break;
}
}
[/PHP]
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
yuriy_hb
yuriy_hb
Topic Starter сообщение 3.6.2010, 11:32; Ответить: yuriy_hb
Сообщение #9


Код приведенный содержит ошибки в силу быстроты набора, прикрепляю целый файлик РНР кода который выполняет всю работу
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
Licoric
Licoric
сообщение 3.6.2010, 15:00; Ответить: Licoric
Сообщение #10


Если я правильно понял, то добавь еще одно поле - `кто смотрел`. А при выводе всех данных вообще проверяй поле. Если пустое - никто не читал. Если есть значение (id прочитавшего, например), то выделяй иным цветом. Как-то так. Ну и смотри - если id совпадает с твоим, то заявка твоя (ты первым прочитал). Если другой - другой прочитал (иногда я как кэп). Ну и так далее.

Замечание модератора:
Эта тема была закрыта автоматически ввиду отсутствия активности в ней на протяжении 100+ дней.
Если Вы считаете ее актуальной и хотите оставить сообщение, то воспользуйтесь кнопкой
или обратитесь к любому из модераторов.
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
Открыть тему
Тема закрыта
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0


Свернуть

> Похожие темы

  Тема Ответов Автор Просмотров Последний ответ
Открытая тема (нет новых ответов) как заслужить право на создание новой темы?
7 writer80 2211 12.3.2024, 22:54
автор: Lumex
Открытая тема (нет новых ответов) <Braga/> Создание Telegram-ботов, web-приложений, крипто-бирж, сайтов.
2 newbraga 1793 10.3.2024, 22:04
автор: newbraga
Открытая тема (нет новых ответов) СОЗДАНИЕ : / САЙтЫ / ЛЕНДЫ / БОТЫ ТГ / ВАЙТЫ / КРЕО / СОФТЫ / ДИЗАЙН [PHP, JS, HTML/CSS] и другое
5 CULA 3421 19.12.2023, 18:55
автор: CULA
Открытая тема (нет новых ответов) Создание и ведение аккаунтов в соцсетях ("В контакте"/Telegram)
Услуги от профессионального журналиста и SMM-менеджера
2 AvtorXXX 1717 13.11.2023, 23:47
автор: AvtorXXX
Открытая тема (нет новых ответов) Создание информационной площадки с доской объявлений
1 xweb 2062 16.1.2023, 16:25
автор: xweb


 



RSS Текстовая версия Сейчас: 24.4.2024, 20:45
Дизайн