"PHP" / Говнокод #1930 Ссылка на оригинал

0

  1. 1
  2. 2
  3. 3
  4. 4
  5. 5
  6. 6
  7. 7
  8. 8
  9. 9
  10. 10
  11. 11
  12. 12
function catGetCategoryById($categoryID)
{
	$categoryID = (int)$categoryID;
	$q = db_query("select categoryID, name, parent, products_count, description, picture, ".
		" products_count_admin, sort_order, viewed_times".
		", allow_products_comparison".
		", allow_products_search".
		", show_subcategories_products, meta_description, meta_keywords ".
		"  from ".CATEGORIES_TABLE.
		" where categoryID=$categoryID");
	return db_fetch_row($q);
}

снова ShopScript...
пересчитал ради интереса количество полей в таблице - как и в запросе 14. вот хотел я добавить еще одно поле. хорошо, что посмотрел, как берутся данные

Запостил: gorky gorky, (Updated )

Комментарии (21) RSS

  • Интересно... Можно ли сократить объём пересылаемых запросами данных, если писать звёздочку там, где вынимаются все или почти все поля? Ведь эти названия, вся вот эта строка с названиями и запятыми, попадёт в СУБД, которая ещё и будет её, строку, разбирать... А нужно всего-то... Всё... Хм...
    Ответить
    • ну можно измерить ради интереса. вообще логично предположить, что если нужно выбрать все данные, то запрос со звездочкой должен выполняться быстрее, но это уже на совести разработчиков сервера БД.
      Ответить
      • замерил. для этого запроса и для запроса со звездочкой время примерно одинаково (около 5% в пользу звезды =) ).
        вообще для меня тут больше играет роль что нужно добавлять в список полей еще одно, что не очень удобно + код читабельнее со звездой все же.
        Ответить
        • Добавление поля -- этого не избежать, если действительно нужно вынуть только часть. Даже если нужно вынуть 30 полей из 40, то лучше выписать 30... Тем более, если в "невыбираемых" полях хранятся тяжёлые данные. А вот, если всё нужно вынимать, то перечисление может и время работы понизить и сетевое соединение с базой загрузить.
          Ответить
  • Если говнокод заключается в том, что вместо звёздочки указаны все поля, то это не говнокод.
    Если в таблица добавятся столбцы неизвестно куда, то этот код будет работать.
    Да к тому же сразу видишь где какой столбец вернулся, не надо в базу глядеть.

    Негодую, не говнокод, минусую.
    Ответить
    • Согласен. Все необходимые поля нужно указывать явно, а не звездочкой.
      Ответить
      • Это вопрос относительный.
        Если речь идёт о том, чтобы вынуть два - три поля из десяти -- конечно нужно. А если вынуть все поля, тогда банально вы гоняете по сети лишние байты текста, кроме того, я уверен, что во всех СУБД есть оптимизации выборки по скорости всех полей.
        Плюс, в некоторых случаях, звёздочка является элементом проектировки. Например, если таблица представляет структурированные записи, и вы пишите запрос по выборке определённых структур, например данных в узлах циклического подграфа, при этом сама программа по коллекционированию данных ничего не знает о том, что именно может хранится в узлах.

        Программист, который занимает одну позицию -- плохой программист. Проектировка -- это всегда выбор. В разных ситуациях выбор может пасть на различные решения.
        Ответить
        • поддерживаю. кстати, хочу напомнить аудитории, что я только потому и вынес это творение на обозрение публики, что здесь производится выборка по ВСЕМ полям.
          плюс к этому меня, как пользователя функции вообще не должна заботить ее начинка, и если функция называется catGetCategoryById то она должна действительно взять ВСЮ категорию, а не часть данных, даже если изменилась структура БД.
          Ответить
          • А не смущает, что порядок полей может быть разным если, к примеру, одна база разворачивается с нуля, а другая апгрейдится добавлением полей? Да и еще с десяток случаев придумать можно.
            Не говнокод - минуснул.
            Ответить
            • не смущает, я поля не по номеру беру, а по имени.
              а 5% процентов меня не волнуют на самом деле, мне важно меньше кода затрагивать при добавлении функционала.
              Ответить
    • не согласен, работать будет и со звездой при добавлении новых полей, если выборку делать не по номеру поля, а по названию.
      >Да к тому же сразу видишь где какой столбец вернулся, не надо в базу глядеть.
      вовсе не видишь, если выборка запехана в отдельную функцию, не видную сразу же. тут уже становится проще и надежнее посмотреть непосредственно на таблицу в СУБД.
      Ответить
      • аффтор, все хорошо и даже "быстрее", пока кто-то не добавил в базу поле типа text и не забил туда собрание сочинений. Все правильно сказано, обычно всегда используют перечисление полей, а то что ты там намерял - это настолько незаметная мелочь, что даже на погрешность списать не получится. Звездочку используют ленивые, а программисты используют ORM.
        Ответить
        • во-первых, 5 процентов - не мелочь. повышению производительности на высоконагруженных системах на 5% будут очень рады.
          во-вторых, я как раз хочу чтобы собрание сочинений таки было доступно. если не нужно будет - я это поле из перечисления уберу.
          в-третьих снова повторяю, для особо слоупочных, что в этом примере из таблицы выбираются все поля, независимо от типа поля.
          и, в-четвертых, каким образом звездочка мешает ORM?
          Ответить
          • Уважаемый, вы о чем? Какие 5 процентов, какая пересылка лишнего текста? Если нужен каждый процент производительности, пользуйте прекомпилированные запросы, оптимизируйте структуру БД, смените движок в конце концов.
            Касательно ORM и звездочки вообще молчу - RTFM, одним словом.
            Ответить
          • ты плохо измерял, 5% это погрешность твоих часов. Во-вторых, а если из этой же таблицы тянутся данные в другом месте? не везде нужен одинаковый набор, зато если использовать везде *, легко перебрать лишнего
            Ответить
            • >не везде нужен одинаковый набор, зато если использовать везде *, легко перебрать лишнего
              я согласен с этим, но тогда вообще незачем было писать универсальную функцию.
              Ответить
  • Звёздочка - зло.
    Здесь верный подход, кроме как этой куевой тучи конкотенаций.
    Ответить
    • Согласен. Звёздочка зло за исключением случаев, если речь идёт о достаточно малом количестве полей и значений.
      Хотя в таких случаях её использование можно оправдать разве что ленью 🙂
      Ответить
      • Желаю вам приятного набора сорока названий полей по десять символов в каждом 😉
        А ленивые программисты пока будут повторно используя код выходить на рынок быстрее.
        Чего это я вас отговариваю названия писать? Пишите, пишите.
        А я за это время успею свою звёздочку продать без потери производительности.
        Ответить
        • да, суровые програмисты выходят на рынок быстрее потому что используют звездочку в MySQL запросах. Еще и без потери производительности!Ё!!11 Ну надо же, целых 40 полей по 10 символов (400 символов) — целых 2-3 минуты набора ай ай ай как грустно все это
          Ответить

Добавить комментарий

Из-за тебя ушел bormand, guest!

    А не использовать ли нам bbcode?


    8