За последние 24 часа нас посетили 154602 программиста и 2131 робот. Сейчас ищут 1142 программиста ...

Нужна помощь с SQL запросом

Тема в разделе "MySQL", создана пользователем MXMX, 1 апр 2012.

  1. MXMX

    MXMX Активный пользователь

    С нами с:
    1 апр 2012
    Сообщения:
    2
    Симпатии:
    0
    Пробую сделать каталог на MaxSite CMS и уже который день не могу разобраться с модернизацией запроса, очень прошу помощи знатоков.

    По умолчанию для одного из типов страниц делается такой SQL запрос:

    Код (Text):
    1. SELECT SQL_BUFFER_RESULT mso_page.`page_id`
    2. FROM (`mso_page`)
    3. JOIN `mso_page_type` ON `mso_page_type`.`page_type_id` = `mso_page`.`page_type_id`
    4. JOIN `mso_meta` ON `mso_meta`.`meta_id_obj` = `mso_page`.`page_id`
    5. WHERE page_status =  'publish'
    6. AND page_type_name =  'cat_1'
    7. AND meta_key = 'tip_sdelki'
    8. AND meta_value = 'sale'
    9. GROUP BY `mso_page`.`page_id`
    10. ORDER BY `page_date_publish` desc
    Он всем хорош и замечателен, но мне необходимо сделать выборку (с соблюдением всех прочих условий) из таблицы mso_meta по нескольким meta_key и/или meta_value

    Пробовал видоизменять запрос до вида:

    Код (Text):
    1. SELECT SQL_BUFFER_RESULT mso_page.`page_id`
    2. FROM (`mso_page`)
    3. JOIN `mso_page_type` ON `mso_page_type`.`page_type_id` = `mso_page`.`page_type_id`
    4. JOIN `mso_meta` ON `mso_meta`.`meta_id_obj` = `mso_page`.`page_id`
    5. WHERE page_status =  'publish'
    6. AND page_type_name =  'cat_1'
    7. AND ((meta_key = 'price') AND (meta_key = 'tip_sdelki' AND meta_value = 'sale'))
    8. GROUP BY `mso_page`.`page_id`
    9. ORDER BY `page_date_publish` desc
    Но он выдает ошибку.

    Еще раз, задача заключается в том чтобы выбрать из таблицы mso_meta ID страниц у которых например meta_key = 'price' И (meta_key = 'tip_sdelki' И meta_value = 'sale') И ... может быть еще несколько таких И... В оконцовке чтобы была возможность сгруппировать их и отсортировать по любому из выбранных meta_value...

    Таблица mso_page: http://shot.qip.ru/005BsF-200arWR/
    Таблица mso_page_type: http://shot.qip.ru/005BsF-200arWT/
    Таблица mso_meta: http://shot.qip.ru/005BsF-300arWS/
     
  2. artoodetoo

    artoodetoo Суперстар
    Команда форума Модератор

    С нами с:
    11 июн 2010
    Сообщения:
    11.132
    Симпатии:
    1.251
    Адрес:
    там-сям
    я не знаю ничего про структуру MaxSite, но ошибка здесь: meta_key не может быть одновременно равен разным значениям.
    переформулируй через OR или там другая колонка должны быть — тебе видней.

    и еще придерживайся правила: если в запросе участвует несколько таблиц, всегда пиши поля с алиасом таблицы.
    типа table1.meta_key
     
  3. MXMX

    MXMX Активный пользователь

    С нами с:
    1 апр 2012
    Сообщения:
    2
    Симпатии:
    0
    Через OR там скорее всего не получится, т.к. нужны именно выборки по нескольким связкам полей meta_key и meta_value. В конце темы я привел скрины таблиц, взгляните пожалуйста.

    Какие могут тут быть решения?
    1) Можно как-то виртуально сделать таблицу на основе выборки из таблицы mso_meta по meta_id_obj, превратить в этой виртуальной таблице все уникальные meta_key в колонки и затем выбирать записи по колонкам?

    2) Или проще сделать выборку как есть а дополнительные выборки и сортировки проводить уже над многомерными массивами?