PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи

Страниц (83): В начало « ... 46 47 48 49 [50] 51 52 53 54 ... » В конец

> Найдено сообщений: 1232
tuareg Отправлено: 31 Мая, 2012 - 10:14:34 • Тема: Помогите доделать функцию вывода треков из базы данных • Форум: Вопросы новичков

Ответов: 4
Просмотров: 409
Я бы Вам порекомендовал, табличку authors (id, name, description) немного дополнить.
Ввести поле в которое сразу записывать 1 букву имени, сделать по нему индекс. Тогда таблица будет что-то типа authors (id, name,firstLetter, description)
Это нужно для того чтобы выборка по первой букве происходила не через like. На большой таблице будет тормозить
tuareg Отправлено: 31 Мая, 2012 - 09:35:45 • Тема: Форма внутри формы • Форум: HTML, Дизайн & CSS

Ответов: 8
Просмотров: 2883
Читаем про ajax.
tuareg Отправлено: 31 Мая, 2012 - 08:24:31 • Тема: Пагинатор • Форум: Объектно-ориентированное программирование

Ответов: 41
Просмотров: 8901
Сегодня постараюсь отписать, что вчера придумал.
А вот тут про COUNT(*) VS SQL_CALC_FOUND_ROWS
Цитата:
http://www.askdev.ru/mysql/763/Количество-записей-в-таблице-count-vs-SQL_CALC_FOUND_ROWS/
tuareg Отправлено: 30 Мая, 2012 - 20:34:04 • Тема: Пагинатор • Форум: Объектно-ориентированное программирование

Ответов: 41
Просмотров: 8901
etoYA пишет:
tuareg, хм. точно, ведь если нужно условие в запросе, то.....

UPD

А теперь уневирсальный?

Из контроллера
PHP:
скопировать код в буфер обмена
  1.  
  2. $sql = 'SELECT * FROM `users`';
  3. $view->r = Paginator::split($sql, 'users', 5, $page);
  4.  


Сам пагинатор
PHP:
скопировать код в буфер обмена
  1.  
  2. class Paginator{
  3.         public static function split($sql, $tbl, $perPage, $page){
  4.                 $r = mysqli()->query("SELECT count(*) FROM $tbl");
  5.                 if (!is_object($r)) throw new ErrorController('db');
  6.                 $count = $r->fetch_row();
  7.                 $total = intval(($count[0] - 1) / $perPage) + 1;
  8.                 $page = intval($page);
  9.                 if (empty($page) || $page <= 0) $page = 1;
  10.                 if ($page > $total) $page = $total;
  11.                 $start = $page * $perPage - $perPage;
  12.                 $r = mysqli()->query("$sql LIMIT $start, $perPage");
  13.                 if (!is_object($r)) throw new ErrorController(mysqli()->error);
  14.                 return $r;
  15.         }
  16. }
  17.  

А вот смотри. Есть таблица новостей. Причем есть новости от даты будущей (занесены заранее), есть новости скрытые(недоступный для просмотра)
PHP:
скопировать код в буфер обмена
  1.  
  2. $r = mysqli()->query("SELECT count(*) FROM $tbl");
  3.  

Этот запрос вернет все новости. Хотя по идее должно быть условие не ворачивать новости в которых дата публикации > текущей даты, плюс новости которые скрыты?
Я просто к тому, что надо предусмотреть условие к этому запросу... Радость
tuareg Отправлено: 30 Мая, 2012 - 20:27:28 • Тема: Пагинатор • Форум: Объектно-ориентированное программирование

Ответов: 41
Просмотров: 8901
Давайте так DeepVarvar и etoYA договоримся. В принципе проблему я обозначил. Если не будет ответов. Я вечерком(или завтра) напишу Вам в личку. Может Илья потом статью напишет.
Просто мне надо все проверить. EXPLAIN и т.д Улыбка
tuareg Отправлено: 30 Мая, 2012 - 20:11:55 • Тема: Пагинатор • Форум: Объектно-ориентированное программирование

Ответов: 41
Просмотров: 8901
Я бы тоже. Но читал книжку, там сами разрабы MySQL пишут денормализация.
(Добавление)
Спасибо тебе. Я придумал способ сделать это все гораздо проще.
tuareg Отправлено: 30 Мая, 2012 - 20:04:15 • Тема: Пагинатор • Форум: Объектно-ориентированное программирование

Ответов: 41
Просмотров: 8901
Может быть, но зато 15000 товаров 600 страница
CODE (SQL):
скопировать код в буфер обмена
  1.  
  2. SELECT * /*(то что надо)*/ FROM `table` WHERE `page`=600;
  3.  

индекс по `page` и лепота Радость
А теперь попробуй написать запросы без `page`?
1. count
2. limit, который хоть уср..сь, но будет выбирать все 600 страниц
tuareg Отправлено: 30 Мая, 2012 - 19:54:51 • Тема: Пагинатор • Форум: Объектно-ориентированное программирование

Ответов: 41
Просмотров: 8901
etoYA пишет:
И что с этим делать?

А вот тут я бы очень хотел услышать мнение "старших товарищей". Здесь нет сарказма если что. Я делаю поле в котором проставляю № страницы. Тут только проблема, что тяжелые процедуры в админке получаются
tuareg Отправлено: 30 Мая, 2012 - 19:43:54 • Тема: Пагинатор • Форум: Объектно-ориентированное программирование

Ответов: 41
Просмотров: 8901
etoYA пишет:
tuareg, хм. точно, ведь если нужно условие в запросе, то.....

Да даже не условие. Смотри 15000 товаров. Нужно вывести 15 на стр.
600 страница если запрашивают 1000 юзеров. Сервер умирает...
tuareg Отправлено: 30 Мая, 2012 - 18:44:01 • Тема: Пагинатор • Форум: Объектно-ориентированное программирование

Ответов: 41
Просмотров: 8901
etoYA Он у тебя не универсальный по сути.
tuareg Отправлено: 30 Мая, 2012 - 17:20:47 • Тема: Составьте таблички за меня • Форум: SQL и Архитектура БД

Ответов: 19
Просмотров: 258
EuGen пишет:
Разница существенна

Еще академический вопрос Улыбка
Вот Вы советуете InnoDB. Я читал про одно и про другое(MyISAM и InnoDB). В данной ситуации я думаю, что лучше будет именно MyISAM, т.к добавление в таблицу будет не так часто, UPDATE тоже.В основном все запросы будут SELECT. Почему же по Вашему мнению лучше InnoDB?
tuareg Отправлено: 30 Мая, 2012 - 16:30:50 • Тема: Пользовательская функция перегружается из-за большого массива • Форум: Вопросы новичков

Ответов: 21
Просмотров: 733
Вы бы код выложили?
tuareg Отправлено: 30 Мая, 2012 - 16:28:34 • Тема: Максимальная длина ключа ассоциативного массива • Форум: Хранение данных, их вывод и обработка

Ответов: 12
Просмотров: 9441
Bio man пишет:
EuGen
В таком случае да. Но если ключ это оочень длинная строка ~1000 символов, и нужно извлечь ее и с ней работать то не о каком хешировании не может быть речи.
Но представить ситуацию, когда это надо не могу.

Bio man Зачем вот смотри. Есть "предполагаемый" массив
PHP:
скопировать код в буфер обмена
  1.  
  2. $array=array();
  3. $array['тут длинный ключ']='какое-то значение';
  4. /*count($array)=10000*/
  5.  

Как хранятся массивы( ключи) можно прочитать на хабре коротко $array['key']-->hash таблица
Идем дальше. Улыбка
Зачем нам это?
Можно сделать проще:
Ключом сделать hash
А первым элементом истинное значение, тогда получится следующее
PHP:
скопировать код в буфер обмена
  1.  
  2. $text='длинная строка'
  3. $key=md5($text);
  4. $array=array();
  5. $array[$key]=array(
  6.  'original':$text // мало ли коллизия и т.д
  7. )
  8.  

Найти данный элемент будет очень просто и быстро
tuareg Отправлено: 30 Мая, 2012 - 13:34:19 • Тема: Составьте таблички за меня • Форум: SQL и Архитектура БД

Ответов: 19
Просмотров: 258
EuGen Спасибо большое понятно.
tuareg Отправлено: 30 Мая, 2012 - 13:22:40 • Тема: Составьте таблички за меня • Форум: SQL и Архитектура БД

Ответов: 19
Просмотров: 258
EuGen Можно чисто академический вопрос Улыбка
А разве не надо сделать еще и таблицу-связку между исполнителями и альбомами?
И если не надо то почему?

Страниц (83): В начало « ... 46 47 48 49 [50] 51 52 53 54 ... » В конец
Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB