Задать вопрос
Профиль пользователя заблокирован сроком «навсегда» без указания причины
Ответы пользователя по тегу SQL
  • Что выбрать: primary key или unique для уникального foreign key?

    @MikhailEdoshin
    Если для учебного проекта, то лучше как primary ID.
    Ответ написан
    Комментировать
  • Чем заменить медленный запрос с LIKE?

    @MikhailEdoshin
    На всякий случай проверьте, проиндексировано ли поле с телефонами; если нет или index minimal, переставьте на all. Скорее всего, проиндексировано, конечно.

    Оптимальный вариант — переделать как советует da0c, только фиксированной длины не надо и пробелами не надо добивать, в FM это бессмысленно. Я тут потестировал одну относительно несложную переделку, но она еще медленнее оказалась.

    Если база на сервере и SQL не принципиален, можно через HTTP GET данные запрашивать; данные будут в XML, но при желании в версии до 11 включительно можно их прямо там через XSLT прогнать.
    Ответ написан
    6 комментариев
  • mysql: выборка дней по порядку

    @MikhailEdoshin
    Мне кажется, тут не обойтись без таблицы дней в каком-то виде. Хотя бы как таблицы дней, привязанной к таблице событий — при создании события во вспомогательной таблице создавалось бы нужное число записей для диапазона дат. Но чтобы заполнять такую таблицу все равно потребуется хотя бы массив чисел от 1 до максимального количества дней в событии.

    В SQLite можно создавать виртуальные таблицы — там, наверное. можно и генерировать даты по запросу. MySQL не знаю — может быть там есть какие-то процедуры, которые могут возвращать выборку? Или, например, создать view из 31 дня, из 12 месяцев и из нужного числа лет, и, соединяя их в нужных комбинациях, генерировать таблицу дней.
    Ответ написан
    Комментировать
  • SQL запрос, как?

    @MikhailEdoshin
    SELECT g.parentId, d.id, d.name, d.isMain
      FROM (SELECT DISTINCT parentId
              FROM my_table) g,
      JOIN my_table d
        ON d.id == (
           SELECT o.id
             FROM my_table o
            WHERE o.parentId == g.parentId
         ORDER BY o.isMain DESC)

    Нужен индекс по parentId, но он у вас, наверное, есть. И вот это вот == (SELECT ...) — это, наверное, особенность SQLite, там такая конструкция возвращает единственное значение. В другом диалекте может потребоваться писать что-то вроде:

        ON d.id IN (
           SELECT o.id
             FROM my_table o
            WHERE o.parentId == g.parentId
         ORDER BY o.isMain DESC
            LIMIT 1)
    Ответ написан
    Комментировать