Помогите с mysql запросом для почти стандартного вывода

Тема в разделе "Базы данных", создана пользователем Extalionez, 1 окт 2013.

Модераторы: latteo
  1. Extalionez

    Extalionez Клоун

    Заблокирован
    Регистр.:
    21 авг 2008
    Сообщения:
    368
    Симпатии:
    185
    Сорь, но я не знаю как лучше тему назвать.
    В общем данные из вложения выводятся в виде таблице, у которой должна быть возможность сортировки(ORDER) и фильтр по полям. Поля в таблице те, что находятся в базе signs. В таблице вообще выводится список ticket'ов. И у каждого тикета значение поля записано в базе descr.
    Проблема в том, что у меня не получается задать несколько условий для where - фильров то может быть выбрано несколько. Да и в фильтре по тому же id может быть задано несколько значений - 1, 2, 15 и нужно вывести все ticket с id 1, 2 и 15. плюс ещё сортировка может быть например по полю телефон, например. Вот такие дела :facepalm:
     

    Вложения:

  2. esche

    esche

    Регистр.:
    9 авг 2009
    Сообщения:
    359
    Симпатии:
    243
    WHERE ticket.id IN (1,2,15)
    ORDER BY `phone`(???)

    phone, видимо, хранится в одной колонке с другими данными и разделяется одним из флагов (`type`?)

    Судя по структуре - реализация похожа на Перейти по ссылке. Единственный универсальный способ - делать программно кучу JOIN-ов по каждому типу sign-а, который задействован в выборке (или в фильтре). Для оптимизации - можно во временную таблицу (или во view-шку) всё складывать (т.е. разворачивать в phone, addr и тд...). Без изменения структуры лучше вариантов нет.
     
  3. Extalionez

    Extalionez Клоун

    Заблокирован
    Регистр.:
    21 авг 2008
    Сообщения:
    368
    Симпатии:
    185
    А если с изменением?
     
  4. esche

    esche

    Регистр.:
    9 авг 2009
    Сообщения:
    359
    Симпатии:
    243
    Так и не увидел, где phone хранится.
    Формально, поля, задействованные для сортировки должны содержать только нужную однородную информацию.
    Т.е. в колонке phone должны быть только телефоны, и она должна быть отдельной колонкой в таблице.
    Вообще, есть презенташка Перейти по ссылке - EAV там упоминается.
     
  5. Extalionez

    Extalionez Клоун

    Заблокирован
    Регистр.:
    21 авг 2008
    Сообщения:
    368
    Симпатии:
    185
    phone хранится в таблице signs. Точнее там хранится названия и типы полей. phone, user_name(ФИО) и т.п. Типы это либо строка, либо число для поиска по вводу слова, либо промежуточного значения - цены между мин и макс.
    То есть в sign хранится список полей - они могут меняться.
    В descr хранится значение этого поля для каждого ticket
     
  6. esche

    esche

    Регистр.:
    9 авг 2009
    Сообщения:
    359
    Симпатии:
    243
    Нет.. где хранится само значение phone.. видимо, в val_text по одному (или нескольким) условиям.
    Вот такое хранение и есть entity-attribute-value (сущность - атрибут - значение). Расплата за универсальность - сложность (не только в реализации, но и в требуемых ресурсах) поиска и фильтрации...