mysql_real_escape_string / Говнокод #2807 Ссылка на оригинал

0

  1. 1
  2. 2
  3. 3
  4. 4
  5. 5
  6. 6
SELECT
    id, description_ru, description_en,
    FLOOR(LENGTH(TRIM(description_ru))/2+0.5) AS descr_ru,
    LENGTH(TRIM(description_en)) AS `descr_en`
FROM items
ORDER BY descr_ru desc;

получает id, русское описание, английское описание, а потом размеры описаний
и сортирует по размеру русского описания.
база в UTF-8, поэтому размеры описаний в символах решил посчитать вот таким говноспособом...
таблица >30 000 записей.
Говнодиверсант какой-то :)

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

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

  • А правильный подсчёт длины текста utf8 поставит базу раком. Нормальная аппроксимация.
    Ответить
    • Если в базе только кирилаца/латиница и правильная работа с utf8 ставит раком, пользуйтесь однобайтной кодировкой, а не городите говновелосипеды.
      Ответить
      • утф - настоящее и будущее, однобайт - позапрошлый век.

        не надо изначально юзать кривые базы и не будет проблем на жопу.
        Ответить
        • > не надо изначально юзать кривые базы
          Более чем спорное утверждение. Есть рынок, софт, хостеры - не юзать mysql невозможно.
          Ответить
    • Здесь проблема не в том ЧТО считать, а вообще ЗАЧЕМ производить вычисления. Для такого количества записей без индексов уже туговато, да только с таким запросом их не используешь. Как выход можно создать отдельное поле, где хранить длину описания, и проиндексировать его.

      Что касается поста, то лучше заюзать CHAR_LENGTH(). Иначе сортировка теряет всякий смысл с таким приближением и практически равносильна сортировке по RAND() 😉
      Ответить
      • * CHAR_LENGTH() - да, так уже и сделали.
        * RAND() - может быть, но что удивительно, пользователи этого не замечали 2 года 🙂 Вернее жаловались, но не настойчиво...
        * "можно создать отдельное поле" - так наверное и сделаем, так как пользователи уже хотят длину без тегов и переводов строк.

        Спасибо.
        Ответить
        • А что за проект такой, где надо сортировать записи по их длине?
          Спец. олимпиада?
          Ответить
          • описание товара. иногда описание есть по-русски иногда по-анг.
            по размеру смотрят 1) есть описание и насколько оно большое 2) сколько символов перевел переводчик.
            Ответить
            • Но больше -- не значит лучше.
              Странно. Лучше бы за описание посетители звездочки ставили.
              Ответить
              • система внутренняя, посетителей нет. только сотрудники.
                количество 1) используется начальником переводчиков для группировки по объему и выдачи заданий переводчику (25 маленьких или 5-7 больших на на день). поэтому точность и не была нужна.
                А вот количество 2) это уже почти деньги, это то что переводчики перевели в символах.
                Ответить
                • Ну вот теперь все стало ясно. В таком случае, действительно, как было сказано выше, длину сообщений лучше хранить в отдельном столбце.
                  Если не хватает места, то можно купить новый хард.
                  А вот если не хватает производительности, то это уже может оказаться совсем иной бюджет.
                  Ответить
        • ололо
          жаловались, но не настойчиво©
          Внатуре, если клиенты не настойчиво* жалуются, зачем переделывать.

          *настойчивость жалобы определяется программистом
          Ответить
          • абсолютно точно. а потом он уволился.
            и мы теперь изучаем много всего...
            Ответить
  • Похоже на предпросмотр статьи. Для этого я бы создал отдельное поле. И длину текста считал бы скриптом, а в базе хранил бы только ранее посчитанные значения.
    Ответить

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

Я, guest, находясь в здравом уме и твердой памяти, торжественно заявляю:

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


    8