У меня сложилась проблематичная ситуация, сервер стал ругаться на использование ресурсов, я решил начать оптимизировать код.
Очень часто, по раз 40 на страницу вызывается функция strlen, использую ее для определения пустых ячеек в таблице.
Иначе говоря, ячейка может быть либо пустая, либо с записью NULL соответственно я приравниваю это тоже к пустой ячейки.
Так вот условие
if (strlen($query['column'])>5) // А он никак не может быть меньше, записи длинные у меня =)
и дальше выводим или нет.
И таких штук 50, а то и куда больше.
Возникает вопрос, можно ли как-то упросить ?
На ум приходит только одно, вставить в пустые ячейки нули, и делать условие, если ноль, если не ноль.
Как мне быть ? :(
Боюсь сервер скоро вешаться начнет :blink:
Спустя 16 минут, 28 секунд (28.12.2011 - 11:13) Ulan написал(а):
если переменная
$query['column']равно null или содержит ноль или пустую строку, то она false по определению, strlen здесь лишнее.
Спустя 20 минут, 35 секунд (28.12.2011 - 11:34) GET написал(а):
NitroGenerate
Мне кажется тебе надо менять архитектуру того места где ты заносишь данные в таблицу, особенно в этом месте $query['column'], может быть стоит при записи проверять
тогда пишем в column 0 или NULL, как тебе выгоднее...то-что ты 40-50 раз вызываешь strlen для ячеек тоже настораживает, хотя может быть я и ошибаюсь.
Мне кажется тебе надо менять архитектуру того места где ты заносишь данные в таблицу, особенно в этом месте $query['column'], может быть стоит при записи проверять
if (strlen($query['column'])>5)
тогда пишем в column 0 или NULL, как тебе выгоднее...то-что ты 40-50 раз вызываешь strlen для ячеек тоже настораживает, хотя может быть я и ошибаюсь.
Спустя 21 минута, 18 секунд (28.12.2011 - 11:55) Michael написал(а):
Тебе надо из базы только нужное брать.
Кинь на нужное поле индекс и в условии отбирай:
- это с учетом NULL. Их не возьмет.
Кинь на нужное поле индекс и в условии отбирай:
WHERE CHAR_LENGTH( stroka ) >5
- это с учетом NULL. Их не возьмет.
Спустя 40 минут, 54 секунды (28.12.2011 - 12:36) NitroGenerate написал(а):
A.B.C. ничего настораживающего нет.
Допустим вывожу по 100 записей из бд на страницу. Все записи собираются из разных таблиц и ячеек, и в граффе ссылка, если есть ссылка, делаю всю запись целиком ссылкой, если ссылки нет то просто строка. Или вот, если присутствует описание, то не тупо вывожу содержание ячейки описания, а еще и дополнительный текст. Тоесть тут без проверки никак.
В итоге имеем 100 строк и 100 проверок длинны.
Менять архитектуру места где заношу, для чего ? Если записи нет, то там либо пусто либо NULL(просто разные таблицы и в них по разному определяется пустое поле) и ничего другого там быть не может.
... Делать 2 проверки
если ноль или если нул тоже не вариант.
Michael
Но на сколько это будет быстрее чем strlen...
Да и к тому же мне нужны даже строки в котороых в какой либо ячейке нет записей. Строку то эту нужно вывести в любом случае, просто в ячейке где(опять же как писал выше) где есть ссылка на сайт, описание категории и тд. Нужно кроме выдачи содержимого этой ячейки, выдать еще дополнительно что-либо.
А вашим SQL условием, я потеряю строку с пустой ячейкой =(
Спасибо Ulan, это то что нужно!
Допустим вывожу по 100 записей из бд на страницу. Все записи собираются из разных таблиц и ячеек, и в граффе ссылка, если есть ссылка, делаю всю запись целиком ссылкой, если ссылки нет то просто строка. Или вот, если присутствует описание, то не тупо вывожу содержание ячейки описания, а еще и дополнительный текст. Тоесть тут без проверки никак.
В итоге имеем 100 строк и 100 проверок длинны.
Менять архитектуру места где заношу, для чего ? Если записи нет, то там либо пусто либо NULL(просто разные таблицы и в них по разному определяется пустое поле) и ничего другого там быть не может.
... Делать 2 проверки
если ноль или если нул тоже не вариант.
Michael
WHERE CHAR_LENGTH( stroka ) >5
Но на сколько это будет быстрее чем strlen...
Да и к тому же мне нужны даже строки в котороых в какой либо ячейке нет записей. Строку то эту нужно вывести в любом случае, просто в ячейке где(опять же как писал выше) где есть ссылка на сайт, описание категории и тд. Нужно кроме выдачи содержимого этой ячейки, выдать еще дополнительно что-либо.
А вашим SQL условием, я потеряю строку с пустой ячейкой =(
Спасибо Ulan, это то что нужно!
Спустя 32 минуты, 40 секунд (28.12.2011 - 13:09) GET написал(а):
Цитата |
Или вот, если присутствует описание, то не тупо вывожу содержание ячейки описания, а еще и дополнительный текст |
я имел ввиду, это место...т.е. например у тебя описание, к примеру тип varchar ты
1. читаешь из ячейки это поле (varchar(255), к примеру)
2. затем считываешь количество символов в нем.
3. делаешь вывод стоит ли его выводить
конечно я не знаю, как ты спроектировал БД, наверное так оно и нужно, но мне показалось, что можно было бы создать поле - идентификатор 1/0 - т.е. описание есть/нет, а описание хранить, к примеру в таблице описаний или не поле идентификатор, а поле с номером строки таблицы где хранятся описания - т.е. 2323/0? к примеру.
определять же есть описание или нет (0/1 или 0/№) нужно перед записью этой строки в БД
Я вот это имел ввиду (так будет быстрее да и сортировку можно будет сделать по описанию если вдруг однажды пригодиться).