Извините, ничего не найдено.

Не расстраивайся! Лучше выпей чайку!
Регистрация
Справка
Календарь

Вернуться   forum.boolean.name > Веб-программирование > PHP / MySQL

PHP / MySQL Создание динамических Веб-ресурсов

Ответ
 
Опции темы
Старый 20.04.2012, 19:59   #1
St_AnGer
Элита
 
Аватар для St_AnGer
 
Регистрация: 21.01.2010
Адрес: Россия, Рязанская область, г.Михайлов
Сообщений: 2,067
Написано 1,185 полезных сообщений
(для 2,828 пользователей)
Много одинаковых списков на странице

Господа-гуру PHP, HTML и MySQL, обращаюсь к вам за помощью.
Имеется код, который берёт из базы данных MySQL все значения и впихивает их в список (список клиентов).

$query3 "SELECT * FROM clients WHERE 1";
$res3 mysql_query($query3) or die(mysql_error());

echo 
"<SELECT name=\"".$s_name."\" style=\"width:200\">
  <OPTION  value= \"0\"></option>"
;
  while (
$row3=mysql_fetch_array($res3))
  {
    
$row_t $row3['id'];
    if (
$row2['reg_cl_id'] == $row_t)
    {
      echo 
"<OPTION selected value = \"$row_t\">".$row3['fio']."</option>";
    }
    else
    {
      echo 
"<OPTION value = \"$row_t\">".$row3['fio']."</option>";
    }
  } 
echo 
"</SELECT>"
В общей сложности в списке 700 записей. Проблем с ним нет, всё прекрасно выводится в список и размещается на странице, код рабочий.
Когда таких списков 2-3 в принципе всё приемлимо и шустренько работает. Но таких списков нужно приблизительно 60 на странице (сама страница - книга записи клиентов с 7 по 22 часов дня, на каждые 15 минут расписания один такой вот длинный грустный список...).
И, соответственно, грузятся они все последовательно друг за другом каждый раз при листании страниц, и это очень долгая история, что не есть хорошо когда надо быстро листать страницы.

Редко прошу помощи кодом, но тут наверно этот случай и есть. Понимаю (а может и нет...) что надо загрузить всего один раз список и как то расставлять его клоны дальше по странице. Но как это реализовать я не знаю, php совершенно неизвестный для меня язык.
Вся база данных и сами страницы уже написаны и прекрасно работают в симбиозе. Остался только одна вот такая нехорошесть. Наставьте меня пожалуйста на путь истинный.

ps. До этого держал точно такую же базу в MS Access 2007, там такой проблемы не было даже близко (всё было реализовано прям в самой базе данных на внутренних формах, принцип реализации был тот же что и на php пытаюсь сделать сейчас).
__________________
Main PC:
Intel Core i5 4260U 1.44 GHz + LPDDR3 1x4096 1600 MHz + Intel HD Graphics 5000.

Asus Ёжик T101-MT:
Intel Atom N-570 1.66 Ghz + DDR2 2x1024 800 Mhz + Intel GMA 3150 128 Mb DDR2


Скачать Doom 2D: Remake v0.3.8a
(Offline)
 
Ответить с цитированием
Старый 20.04.2012, 20:06   #2
moka
.
 
Регистрация: 05.08.2006
Сообщений: 10,429
Написано 3,454 полезных сообщений
(для 6,863 пользователей)
Ответ: Много одинаковых списков на странице

Использовать кеширование?
Только можно поинтересоваться, это что, на каждые 15 минут расписания у тебя 700 записей?
Можно побольше инфы о отношении данных таблицы и конкретики данных. Т.к. подкрадывается сомнение что там всё консистентно.
Также если проблемы с объёмом данных, прибегай к кешированию и подгрузке используя например AJAX.

Исходя из скудных данных. Как понял у тебя есть список людей (700), и есть расписание. В каждые 15 минут тебе нужно поставить человека. Так?

Зачем тебе делать это SELECT'ом? В смысле, не нужно делать комбобоксом.

Используй JavaScript для такой операции. А именно:
1. Выдай один раз список персон (вообще это делать также нужно по фильтрам и т.п. но пох).
2. Выдай ячейки расписания с привязанными к ячейкам id персон.
3. На стороне клиента, запихай список персон в хештаблицу используя JS.
4. После загрузки страницы, пробегись по расписанию ячейкам и вставь туда нужные данные (имя например), т.к. они у тебя уже есть в памяти.
5. При нажатии на ячейку делай всплывающее окошко (не закладка, а псевдо-окошко на той же страницу, тупо div показываемый / скрываемый используя JS).
6. В этом окошке имей таблицу персон с фильтрами (чтобы тупо искать удобнее было).
7. Суть окошка - возвратить данные о пользователи.
8. При выборе, отсылай AJAX запрос серверу о изменении конкретной ячейки и время последнего обновления данных.
9. В ответе с сервера, проверяй были ли изменения с последнего обновления на клиенте. Если да, то добавь данные о изменённых ячейках (тупо xml или json). Также если есть изменения у персон или добавлены новые.
10. На стороне клиента получив ответ, если есть изменения, применяй их.
11. Запускай AJAX запрос на изменения каждые например 30 секунд, и дай возможность делать запрос по нажатию кнопки в фронтенде.

Таким образом у тебя будет "реалтайм" таблица расписания с обновлениями без необходимости обновлять страницу, что сильно снизит нагрузку на сервер, и улучшит опыт броузинга.

Также, НИКОГДА!!!!! не используй таблицы. Делай всё DIV'ами. Это древний век (таблицы).
(Offline)
 
Ответить с цитированием
Сообщение было полезно следующим пользователям:
St_AnGer (20.04.2012)
Старый 20.04.2012, 20:19   #3
St_AnGer
Элита
 
Аватар для St_AnGer
 
Регистрация: 21.01.2010
Адрес: Россия, Рязанская область, г.Михайлов
Сообщений: 2,067
Написано 1,185 полезных сообщений
(для 2,828 пользователей)
Ответ: Много одинаковых списков на странице

Сообщение от MoKa Посмотреть сообщение
Использовать кеширование?
Только можно поинтересоваться, это что, на каждые 15 минут расписания у тебя 700 записей?
Можно побольше инфы о отношении данных таблицы и конкретики данных. Т.к. подкрадывается сомнение что там всё консистентно.
Также если проблемы с объёмом данных, прибегай к кешированию и подгрузке используя например AJAX.

Нажмите на изображение для увеличения
Название: Безымянный.png
Просмотров: 1328
Размер:	53.7 Кб
ID:	16673

Вот вид части страницы записи. Так с 7 и до 22 часов включительно. Каждый список содержит одни и те же данные (id клиента, фио клиента). Когда список содержал 5 клиентов всё грузилось мгновенно. Но я загрузил имеющихся в рабочей сейчас бд Access (701 запись), и вот что получилось.

С javaScript не знаком абсолютно, увы Select'ом делал потому что с другим ничем ещё не знаком.

Спасибо за оперативный ответ. Пойду гуглить и учиться написанию скриптов.

upd Вопрос. Из списка удобно выбирать клиента вбив первые буквы его фамилии. Тем способом, что советуете вы, это будет возможно сделать? Вопрос ламерский, понимаю, но базу делаю не для себя (я ФИО клиента напечатаю быстрее чем он успеет договорить, в отличии от прямого пользователя программы)
__________________
Main PC:
Intel Core i5 4260U 1.44 GHz + LPDDR3 1x4096 1600 MHz + Intel HD Graphics 5000.

Asus Ёжик T101-MT:
Intel Atom N-570 1.66 Ghz + DDR2 2x1024 800 Mhz + Intel GMA 3150 128 Mb DDR2


Скачать Doom 2D: Remake v0.3.8a
(Offline)
 
Ответить с цитированием
Старый 20.04.2012, 20:24   #4
moka
.
 
Регистрация: 05.08.2006
Сообщений: 10,429
Написано 3,454 полезных сообщений
(для 6,863 пользователей)
Ответ: Много одинаковых списков на странице

Думаю предложенный вариант - то что тебе нужно. Чтобы избежать перезагрузки постоянной. Если ещё больше будет персон, тогда нужно делать запросы с фильтрами, подобно гуглу, где будет искаться персона исходя из предоставленных данных. Но это уже слишком сложно.
Даже сценарий выше, весьма не просто для начинающего веб разработчика, но думаю если такое сделаешь, ОЧЕНЬ много по пути выучишь, т.к. задача затрагивает большой спектр важных аспектов.
(Offline)
 
Ответить с цитированием
Сообщение было полезно следующим пользователям:
St_AnGer (20.04.2012)
Старый 20.04.2012, 20:31   #5
St_AnGer
Элита
 
Аватар для St_AnGer
 
Регистрация: 21.01.2010
Адрес: Россия, Рязанская область, г.Михайлов
Сообщений: 2,067
Написано 1,185 полезных сообщений
(для 2,828 пользователей)
Ответ: Много одинаковых списков на странице

Сообщение от MoKa Посмотреть сообщение
Думаю предложенный вариант - то что тебе нужно. Чтобы избежать перезагрузки постоянной. Если ещё больше будет персон, тогда нужно делать запросы с фильтрами, подобно гуглу, где будет искаться персона исходя из предоставленных данных. Но это уже слишком сложно.
Даже сценарий выше, весьма не просто для начинающего веб разработчика, но думаю если такое сделаешь, ОЧЕНЬ много по пути выучишь, т.к. задача затрагивает большой спектр важных аспектов.
Просто огромное спасибо вам, Максим! Идея очень понятна (и в мыслях уже сформирована задача по реализации). Ушёл перелопачивать гугл на тему javaScript и AJAX.
__________________
Main PC:
Intel Core i5 4260U 1.44 GHz + LPDDR3 1x4096 1600 MHz + Intel HD Graphics 5000.

Asus Ёжик T101-MT:
Intel Atom N-570 1.66 Ghz + DDR2 2x1024 800 Mhz + Intel GMA 3150 128 Mb DDR2


Скачать Doom 2D: Remake v0.3.8a
(Offline)
 
Ответить с цитированием
Старый 20.04.2012, 20:51   #6
moka
.
 
Регистрация: 05.08.2006
Сообщений: 10,429
Написано 3,454 полезных сообщений
(для 6,863 пользователей)
Ответ: Много одинаковых списков на странице

*на ты, тут все свои
(Offline)
 
Ответить с цитированием
Сообщение было полезно следующим пользователям:
St_AnGer (20.04.2012)
Старый 26.04.2012, 11:19   #7
St_AnGer
Элита
 
Аватар для St_AnGer
 
Регистрация: 21.01.2010
Адрес: Россия, Рязанская область, г.Михайлов
Сообщений: 2,067
Написано 1,185 полезных сообщений
(для 2,828 пользователей)
Ответ: Много одинаковых списков на странице

Вообщем, реализовал почти так как было предложено (на сколько это получилось при моём нынешнем уровне знаний).

1) заместо 64 списков я сделал 64 простых текстовых поля(для хранения ФИО клиентов) с id от 1 до 64 включительно, и, соответствующие каждому полю, 64 скрытых элемента (для хранения id клиентов);
2) при загрузке страницы в массив загружается список клиентов id => фио, сразу же в javaScript передаются по одному эти же значения в массив в самом скрипте, так же 64 текстовых поля заполняются соответствующими значениями из бд (ну если есть конечно);
3) создал скрытый при загрузке страницы div фиксированный по центру страницы, который содерит в себе список пользователей, заполненный из одновременно с заполнением массива пользователей, и кнопку "выбрать".

При нажатии на любое из текстовых полей по событию onclick вызывается функция принимающая в качестве параметра id текстового поля и открывающая скрытый изначально div.
Выбрали нужного клиента, нажали кнопку "выбрать". По нажатию на кнопку выбрать по событию onclick вызываю функцию, принимающая в параметры id списка клиентов. В фукнции по принятому id узнаём переданное значение id-клиента из списка. И заполняем значение нужного текстового поля ФИО клиента и соответствующего ему скрытого поля id клиент, взятые из созанного при загрузке страницы массива. Ну и скрываем соответственно открытый div, он ведь больше ненужен.

Всё! Загружается всё мгновенно, работает идеально. Как оказалось, JavaScript очень простой язык Да, надо перерабатывать будет всю схему, т.к. много лишних элементов, но блин я получил неизмеряемое количество профита и наслаждения когда всё заработало как надо! Последний раз такое у меня было когда моргнул свежеспаянный светодиодный куб Спасибо наиогромнейшее тебе, Максим!

реалтайм таблица расписания мне в данном случае ненужна, т.к. единовременно будет работать с бд только один человек. Но всё попробую сделать второй такой проект с использованием AJAX.
__________________
Main PC:
Intel Core i5 4260U 1.44 GHz + LPDDR3 1x4096 1600 MHz + Intel HD Graphics 5000.

Asus Ёжик T101-MT:
Intel Atom N-570 1.66 Ghz + DDR2 2x1024 800 Mhz + Intel GMA 3150 128 Mb DDR2


Скачать Doom 2D: Remake v0.3.8a
(Offline)
 
Ответить с цитированием
Старый 26.04.2012, 13:17   #8
moka
.
 
Регистрация: 05.08.2006
Сообщений: 10,429
Написано 3,454 полезных сообщений
(для 6,863 пользователей)
Ответ: Много одинаковых списков на странице

Молодцом! Если работает как и ожидал, то круто

У меня была подобная задача, но ещё сложнее, список персон был около двух миллионов, приходилось делать заместо списка персон, некую таблицу с фильтрами по колонкам, где нужно было вводить фильтры, это отправлялось на сервер в виде AJAX запроса (в будущем реализовал лонгпуллом и потом вебсокетами). В общем после запроса сервер создаёт запрос в бд исходя из фильтров и выдаёт первые 10 вариантов. В общем работало тоже шустро так
Единственная проблема была, это скорость фильтров через бд где 2 миллиона записей в таблице. Это сильно глючило.
(Offline)
 
Ответить с цитированием
Сообщение было полезно следующим пользователям:
St_AnGer (26.04.2012)
Старый 26.04.2012, 13:44   #9
SBJoker
Злобный Админ
 
Аватар для SBJoker
 
Регистрация: 04.09.2005
Сообщений: 5,926
Написано 3,415 полезных сообщений
(для 9,330 пользователей)
Ответ: Много одинаковых списков на странице

Реквестирую в отдельных тред фотоотчёт о сборке LED-куба.
__________________
(Offline)
 
Ответить с цитированием
Сообщение было полезно следующим пользователям:
St_AnGer (26.04.2012)
Старый 26.04.2012, 17:06   #10
St_AnGer
Элита
 
Аватар для St_AnGer
 
Регистрация: 21.01.2010
Адрес: Россия, Рязанская область, г.Михайлов
Сообщений: 2,067
Написано 1,185 полезных сообщений
(для 2,828 пользователей)
Ответ: Много одинаковых списков на странице

Сообщение от SBJoker Посмотреть сообщение
Реквестирую в отдельных тред фотоотчёт о сборке LED-куба.
Фотоотчёт позже вечером сделаю, когда с работы вернусь эта задачка меня на долго и конкретно загрузила, если учесть что до начала его сборки знания в электрике и электронике у меня были минимальными сейчас их конечно не очень намного больше, но программируемые приборы делать могу уже почти не напрягаясь вообщем, всё отпишу в фотоотчёте
__________________
Main PC:
Intel Core i5 4260U 1.44 GHz + LPDDR3 1x4096 1600 MHz + Intel HD Graphics 5000.

Asus Ёжик T101-MT:
Intel Atom N-570 1.66 Ghz + DDR2 2x1024 800 Mhz + Intel GMA 3150 128 Mb DDR2


Скачать Doom 2D: Remake v0.3.8a
(Offline)
 
Ответить с цитированием
Ответ


Опции темы

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


Часовой пояс GMT +4, время: 15:31.


vBulletin® Version 3.6.5.
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Перевод: zCarot
Style crйe par Allan - vBulletin-Ressources.com