Помощник
|
Создание ффекта непрочитаные письма |
yuriy_hb
|
Сообщение
#1
|
||
|
|
||
|
|||
Licoric |
3.6.2010, 4:59;
Ответить: Licoric
Сообщение
#2
|
|
Опционально можешь использовать куки, но это не снимет нагрузку на сервер. Но я бы добавил к текущей таблице заявок доп поле с параметрами 0/1 (визибл-инвизибл)? а не отдельную таблицу. Дабы в одном запросе узнавать всю необходимую информацию. (where visible = `1`).
Да и какие значения (количество) у вас там в базе, что она виснуть может? - Вынесите ее на отдельный серв. Если заказов много, то деньги наверняка есть. Сервер взять сможете, думаю. Если начальство ограничивает финансы, то я бы целенаправленно не стал ничего оптимизировать. Очень часто "оно" хочет "поисковик, как гугл. неделя на разработку". Надо бороться за здравый смысл. - оптимизируйте таблицу (записи старше 2-4 месяцев удаляйте). Если записи нужны - переносите в базу "архив. не удалять" ))) - нет, думаю, особого смысла держать всё за последние *цать лет в одной базе. Особенно если используется 3-4% от базы (я образно). - заархивируйте часть базы и удалите ее. При необходимости - локальная машина, денвер + простой скрипт вам помогут. Как бы вопрос то уже решен. Проблема только в тормозах сервера. Вот с этого и начните. |
|
|
yuriy_hb
|
Сообщение
#3
|
|
Я уже далал так, но проблема в том, что заявок очегь много. Запрос и ответ происходит с помощью Ajax. Сценарий на сервере долго делает выборку, (время ожидания ответа превышает 10-12с), что порождает неудобство. Может нужно вместо Ajax использовать обычную перезагрузку страницы, может это ускорит работу?
И еще. В текущей таблице заявок создать можно отделную колонку где будет проставлятся статус заявки 0/1. Но как это сделать если нужно отдельно для каждого пользователя устанавливать свои настройки касательно заявок. К примру: Есть 6 таблиц (легковые, грузовые, автобусы...). В каждой таблице находятся заявки на запчасти для определенного типа авто: Если я к примеру добавлю еще один столбец к каждой з таблиц, который будет отвечать за статус заявки, то даные настройки будут применены только к одному пользователю. А Если их 100 или 1000 пользователей, как тогда повязать с каждым пользователем свои настройки касательно каждой заявки расположеной в 6 отдельных таблицах.??? Вот в чем проблема у меня, нужно ведь для каждого пользователя указывать свои настройки (одни просмотрели заявкуЮ другие нет). Как тогда и где все это проописывать? |
|
|
ZhukV |
3.6.2010, 8:46;
Ответить: ZhukV
Сообщение
#4
|
|
Но оказалося что это очень сильно загружает сервер и выборка из БД происходит очень медлено а временами даже виснит... Впервые такое слышу. Сколько работаю с мускулой, как через ПХП, так и через соманд строку, проблем не было с такой выборкой никаких. Мускула вилится только при использовании внутренних функций. Сервер, тоесть АПАЧ, больше всего может валить только ПХП, так что те нужно оптимизировать код. В таблице, там где письма создай поле `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
|
Сообщение
#5
|
|
В таблице, там где письма создай поле `if_view` типа ENUM со значением '0','1'...
Это понятно, что для каждой заявки нужно указать ее статус (0/1). Но как быть если этот статус нужно установить для каждого зарегестрированого пользователя, чтобы каждый из них видел свои новые письма. Ведь один пользователь может просмотреть заявку, другой нет... и нужно это значение 0/1 привязывать конкретно к каждому вошедшему в систему. Одним полем не решишь проблему, наверное нужно создавать отдельную таблицу, где будут хранится все заявки и все пользователи... это опять идет ду***ж информации и рост строк в таблице. Просудите сами, если пользователей 1000 чел. Заявок 5000 и для каждого пользователя нужно по своему отмечать статус заявки, то умножая получаем 5000000 строк в таблице... не катит.... |
|
|
ZhukV |
3.6.2010, 9:26;
Ответить: ZhukV
Сообщение
#6
|
|
Не понял......
Что, куча пользователей сможет читать одну и туже заявку? |
|
|
unnormal |
3.6.2010, 9:43;
Ответить: unnormal
Сообщение
#7
|
|
Я уже далал так, но проблема в том, что заявок очегь много. Запрос и ответ происходит с помощью Ajax. Сценарий на сервере долго делает выборку, (время ожидания ответа превышает 10-12с), что порождает неудобство. Может нужно вместо Ajax использовать обычную перезагрузку страницы, может это ускорит работу? Проблема скорее всего в кривости php скриптов, а в частности можно уменьшить частоту ajax обновлений страницы, ну или отптимизировать их (предпроверять изменилось ли кол-во писем, что бы постоянно не отправлять полную информацию) Лучше скинь код обновления списка писем. |
|
|
yuriy_hb
|
Сообщение
#8
|
|
Не понял...... Что, куча пользователей сможет читать одну и туже заявку? Разясню алгоритм работмы: пользователь (продавец з/ч) должен зарегится на сайте, после чего попадпет в личный кабинет, в котором и появляется список всех поступивших заявок. Новые непрочитаные заявки дожны выделятся особым цветом (к примеру синим), а вот прочитаные (промсотрены уже) другим цветом (красным). Тоисть каждый зарегестрированый пользователь просматривает все заявки находящиеся в БД, но вот касательно того, просмотрел он конкретно выбраную заявку или нет будет зависит статус отображения. К примеру есть заявка №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
|
Сообщение
#9
|
|
Код приведенный содержит ошибки в силу быстроты набора, прикрепляю целый файлик РНР кода который выполняет всю работу
|
|
|
Licoric |
3.6.2010, 15:00;
Ответить: Licoric
Сообщение
#10
|
|
|
Если я правильно понял, то добавь еще одно поле - `кто смотрел`. А при выводе всех данных вообще проверяй поле. Если пустое - никто не читал. Если есть значение (id прочитавшего, например), то выделяй иным цветом. Как-то так. Ну и смотри - если id совпадает с твоим, то заявка твоя (ты первым прочитал). Если другой - другой прочитал (иногда я как кэп). Ну и так далее.
|
|
|
||
|
Похожие темы
Тема | Ответов | Автор | Просмотров | Последний ответ | |
---|---|---|---|---|---|
как заслужить право на создание новой темы? | 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 |
Текстовая версия | Сейчас: 24.4.2024, 20:45 |