За последние 24 часа нас посетили 62518 программистов и 1746 роботов. Сейчас ищут 966 программистов ...

Помогите расшифровать сложный запрос.

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

  1. jei

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

    С нами с:
    11 июн 2009
    Сообщения:
    542
    Симпатии:
    0
    Помогите расшифровать сложный запрос.
    Он отвечает за выборку продуктов с определённым производителем.
    Я примерно понимаю что берутся определённый товары с соответствующим производителес,но хотелось бы знать по точнее спасибо.
    Код (Text):
    1. if ($joinMf == TRUE) {
    2.             $joinedTables .= ' LEFT JOIN `#__virtuemart_product_manufacturers` ON p.`virtuemart_product_id` = `#__virtuemart_product_manufacturers`.`virtuemart_product_id`
    3.              LEFT JOIN `#__virtuemart_manufacturers_' . VMLANG . '` as m ON m.`virtuemart_manufacturer_id` = `#__virtuemart_product_manufacturers`.`virtuemart_manufacturer_id` ';
    4.         }
     
  2. igordata

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

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    вопрос в чем?
    LEFT JOIN `#__virtuemart_manufacturers_' . VMLANG . '` as m ON m.`virtuemart_manufacturer_id` = `#__virtuemart_product_manufacturers`.`virtuemart_manufacturer_id` '
     
  3. jei

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

    С нами с:
    11 июн 2009
    Сообщения:
    542
    Симпатии:
    0
    Вопрос в том что не знаю точной расшифровки по буквам.

    Добавлено спустя 3 минуты 43 секунды:
    вот не понимаю к примеру зачем второй раз присоединять LEFT JOIN название что ли производителя достают?

    Добавлено спустя 11 минут 10 секунд:
    да да в этом вопрос
    1.не понимаю к примеру зачем второй раз присоединять LEFT JOIN название что ли производителя достают?
    2.Есть ли у этого запроса левая первая чать к чему они его присоединяют?
    Код (Text):
    1. LEFT JOIN `#__virtuemart_manufacturers_' . VMLANG . '` as m ON m.`virtuemart_manufacturer_id` = `#__virtuemart_product_manufacturers`.`virtuemart_manufacturer_id` '
     
  4. igordata

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

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    первый джоин работает по неким virtuemart_product_id
    а уже второй по производителям virtuemart_manufacturer_id
     
  5. Swapf

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

    С нами с:
    8 окт 2012
    Сообщения:
    82
    Симпатии:
    0
    Адрес:
    Россия, Самарская обл, Сызрань
    Два левых соединения. Первый - с таблицей `#__virtuemart_product_manufacturers`(так понимаю производители товаров) по 'virtuemart_product_id', второй - с `#__virtuemart_manufacturers_'.VMLANG.'`(не уверен, но возможно это таблица языковой локали, например 'RU'-для русскоязычного названия производителя. Не работал с vertuemart - не могу сказать точно) по 'virtuemart_manufacturer_id'.
    Итого 2 лефт джоина с разными таблицами. Что тебя смущает?
     
  6. jei

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

    С нами с:
    11 июн 2009
    Сообщения:
    542
    Симпатии:
    0
    А полностью можешь расписать если сделаю.То кину тебе пару сотен р. на веб кошель.

    Добавлено спустя 2 минуты 44 секунды:
    #__virtuemart_product_manufacturers это таблица которая говорит этому продукту соответствует этот производитель

    Добавлено спустя 2 минуты 22 секунды:
    #__virtuemart_manufacturers_' . VMLANG . это таблица с русскими названиями категорий ,кароче просто она идёт
    в базе virtuemart_manufacturers_ru_ru

    Добавлено спустя 2 минуты 38 секунд:
    3.Вопрос это что за точка между ними?)))

    Код (Text):
    1. #__virtuemart_product_manufacturers`.`virtuemart_product_id`
    Добавлено спустя 2 минуты 3 секунды:
    4.Вопрос что значит?
    Код (Text):
    1. as m ON
    5.К чему там какие псевдонимы относятся?

    Спасибо

    Добавлено спустя 2 минуты 1 секунду:
    6.Вопрос что такое оператор ON?

    Добавлено спустя 14 минут 31 секунду:
    кому интересно и кто может помочь не бесплатно
    ссылка на весь код
    http://levis.hostoi.com/product.rar
     
  7. Swapf

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

    С нами с:
    8 окт 2012
    Сообщения:
    82
    Симпатии:
    0
    Адрес:
    Россия, Самарская обл, Сызрань
    LEFT JOIN `#__virtuemart_manufacturers_' . VMLANG . '` as m ON m.`virtuemart_manufacturer_id` = `#__virtuemart_product_manufacturers`.`virtuemart_manufacturer_id` '

    Вот смотри: выше делается левое соединение с таблицей #__virtuemart_manufacturers_' . VMLANG . '(при VMLANG =ru_ru), она будет выглядеть #__virtuemart_manufacturers_ru_ru. Тут же('после as') дается ей псевдоним 'm'. И далее('после ON'. Оператор ON определяет по каким критериям идет связь таблиц) учитывая этот псевдоним('m') таблицы('#__virtuemart_manufacturers_ru_ru') определяется по какому критерии они будт соединяться, т.е.:

    m.`virtuemart_manufacturer_id` = `#__virtuemart_product_manufacturers`.`virtuemart_manufacturer_id`
    где `virtuemart_manufacturer_id` - в данном случае одинаковые имена колонок разных таблиц по которым осуществляется левое соединение.

    m.`virtuemart_manufacturer_id` - означает, что берем таблицу, которой соответствует псевдоним 'm' и обращаемся к ее колонке с именем 'virtuemart_manufacturer_id', используя точку('.')

    вот и все. Вроде ниче не напутал

    Добавлено спустя 23 минуты 55 секунд:
    А что ты вообще делаешь? Какой сайт? Какова твоя конечная цель и чего ты хочешь добиться?
    Я к тому, что есть такая замечательная CMS Magento называется - имхо, очень крутая. Там есть и доставка и популярные системы оплаты и интеграция с 1С для бух. учета и прочее-прочее. В освоении она сложновата и ее движок написан частично на Zend Framework, Зато на торентах есть видео-уроки по ее освоению. Но она может все. Еще к ней есть куча разных модулей, включая даже мульти-вендорс.
     
  8. jei

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

    С нами с:
    11 июн 2009
    Сообщения:
    542
    Симпатии:
    0
    Да мне надо перебить поисковый запрос что бы он искал не по производителю а по таблице дополнительных полей.То есть по сути всё тоже самое только к другой таблице.Просто не обладаю глубокими знаниями сложных запросов.Если есть время помоги перестроить запрос могу 500р заплатить.Только говорят там ещё есть левая часть у запроса тоесть это не весь запрос это так?Скайп я тебе в личку отправлю
     
  9. Swapf

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

    С нами с:
    8 окт 2012
    Сообщения:
    82
    Симпатии:
    0
    Адрес:
    Россия, Самарская обл, Сызрань
    Все сделал. Подробности отписал в личку.
     
  10. jei

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

    С нами с:
    11 июн 2009
    Сообщения:
    542
    Симпатии:
    0
    счас наверное многие попутают я увидел полный текст запроса)))

    Код (Text):
    1. SELECT SQL_CALC_FOUND_ROWS l.`virtuemart_product_id`
    2.   FROM `cms_virtuemart_products_ru_ru` as l JOIN `cms_virtuemart_products` AS p using (`virtuemart_product_id`)
    3.   LEFT JOIN `cms_virtuemart_product_categories`
    4.   ON p.`virtuemart_product_id` = `cms_virtuemart_product_categories`.`virtuemart_product_id`
    5.   LEFT JOIN `cms_virtuemart_categories_ru_ru` as c
    6.   ON c.`virtuemart_category_id` = `cms_virtuemart_product_categories`.`virtuemart_category_id`
    7.   LEFT JOIN `cms_virtuemart_product_manufacturers`
    8.   ON p.`virtuemart_product_id` = `cms_virtuemart_product_manufacturers`.`virtuemart_product_id`
    9.   LEFT JOIN `cms_virtuemart_manufacturers_ru_ru` as m
    10.   ON m.`virtuemart_manufacturer_id` = `cms_virtuemart_product_manufacturers`.`virtuemart_manufacturer_id`
    11.   LEFT JOIN `cms_virtuemart_product_manufacturers`
    12.   ON p.`virtuemart_product_id` = `cms_virtuemart_product_manufacturers`.`virtuemart_product_id`
    13. LEFT
    14.   OUTER JOIN `cms_virtuemart_shoppergroups` as s
    15.   ON s.`virtuemart_shoppergroup_id` = `cms_virtuemart_product_shoppergroups`.`virtuemart_shoppergroup_id`
    16.   WHERE ((`product_name` LIKE "%GENEVRIER%" OR `product_s_desc` LIKE "%GENEVRIER%" OR `category_name` LIKE "%GENEVRIER%" OR `category_description` LIKE "%GENEVRIER%" OR `mf_name` LIKE "%GENEVRIER%")
    17.   AND p.`published`="1"
    18.   AND ( s.`virtuemart_shoppergroup_id`= "1" OR s.`virtuemart_shoppergroup_id` IS NULL ) )
    19.   group by p.`virtuemart_product_id`
    20.   ORDER BY product_name ASC
    21.   LIMIT 0, 10