Помогите расшифровать сложный запрос. Он отвечает за выборку продуктов с определённым производителем. Я примерно понимаю что берутся определённый товары с соответствующим производителес,но хотелось бы знать по точнее спасибо. Код (Text): if ($joinMf == TRUE) { $joinedTables .= ' LEFT JOIN `#__virtuemart_product_manufacturers` ON p.`virtuemart_product_id` = `#__virtuemart_product_manufacturers`.`virtuemart_product_id` LEFT JOIN `#__virtuemart_manufacturers_' . VMLANG . '` as m ON m.`virtuemart_manufacturer_id` = `#__virtuemart_product_manufacturers`.`virtuemart_manufacturer_id` '; }
вопрос в чем? LEFT JOIN `#__virtuemart_manufacturers_' . VMLANG . '` as m ON m.`virtuemart_manufacturer_id` = `#__virtuemart_product_manufacturers`.`virtuemart_manufacturer_id` '
Вопрос в том что не знаю точной расшифровки по буквам. Добавлено спустя 3 минуты 43 секунды: вот не понимаю к примеру зачем второй раз присоединять LEFT JOIN название что ли производителя достают? Добавлено спустя 11 минут 10 секунд: да да в этом вопрос 1.не понимаю к примеру зачем второй раз присоединять LEFT JOIN название что ли производителя достают? 2.Есть ли у этого запроса левая первая чать к чему они его присоединяют? Код (Text): LEFT JOIN `#__virtuemart_manufacturers_' . VMLANG . '` as m ON m.`virtuemart_manufacturer_id` = `#__virtuemart_product_manufacturers`.`virtuemart_manufacturer_id` '
первый джоин работает по неким virtuemart_product_id а уже второй по производителям virtuemart_manufacturer_id
Два левых соединения. Первый - с таблицей `#__virtuemart_product_manufacturers`(так понимаю производители товаров) по 'virtuemart_product_id', второй - с `#__virtuemart_manufacturers_'.VMLANG.'`(не уверен, но возможно это таблица языковой локали, например 'RU'-для русскоязычного названия производителя. Не работал с vertuemart - не могу сказать точно) по 'virtuemart_manufacturer_id'. Итого 2 лефт джоина с разными таблицами. Что тебя смущает?
А полностью можешь расписать если сделаю.То кину тебе пару сотен р. на веб кошель. Добавлено спустя 2 минуты 44 секунды: #__virtuemart_product_manufacturers это таблица которая говорит этому продукту соответствует этот производитель Добавлено спустя 2 минуты 22 секунды: #__virtuemart_manufacturers_' . VMLANG . это таблица с русскими названиями категорий ,кароче просто она идёт в базе virtuemart_manufacturers_ru_ru Добавлено спустя 2 минуты 38 секунд: 3.Вопрос это что за точка между ними?))) Код (Text): #__virtuemart_product_manufacturers`.`virtuemart_product_id` Добавлено спустя 2 минуты 3 секунды: 4.Вопрос что значит? Код (Text): as m ON 5.К чему там какие псевдонимы относятся? Спасибо Добавлено спустя 2 минуты 1 секунду: 6.Вопрос что такое оператор ON? Добавлено спустя 14 минут 31 секунду: кому интересно и кто может помочь не бесплатно ссылка на весь код http://levis.hostoi.com/product.rar
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, Зато на торентах есть видео-уроки по ее освоению. Но она может все. Еще к ней есть куча разных модулей, включая даже мульти-вендорс.
Да мне надо перебить поисковый запрос что бы он искал не по производителю а по таблице дополнительных полей.То есть по сути всё тоже самое только к другой таблице.Просто не обладаю глубокими знаниями сложных запросов.Если есть время помоги перестроить запрос могу 500р заплатить.Только говорят там ещё есть левая часть у запроса тоесть это не весь запрос это так?Скайп я тебе в личку отправлю
счас наверное многие попутают я увидел полный текст запроса))) Код (Text): SELECT SQL_CALC_FOUND_ROWS l.`virtuemart_product_id` FROM `cms_virtuemart_products_ru_ru` as l JOIN `cms_virtuemart_products` AS p using (`virtuemart_product_id`) LEFT JOIN `cms_virtuemart_product_categories` ON p.`virtuemart_product_id` = `cms_virtuemart_product_categories`.`virtuemart_product_id` LEFT JOIN `cms_virtuemart_categories_ru_ru` as c ON c.`virtuemart_category_id` = `cms_virtuemart_product_categories`.`virtuemart_category_id` LEFT JOIN `cms_virtuemart_product_manufacturers` ON p.`virtuemart_product_id` = `cms_virtuemart_product_manufacturers`.`virtuemart_product_id` LEFT JOIN `cms_virtuemart_manufacturers_ru_ru` as m ON m.`virtuemart_manufacturer_id` = `cms_virtuemart_product_manufacturers`.`virtuemart_manufacturer_id` LEFT JOIN `cms_virtuemart_product_manufacturers` ON p.`virtuemart_product_id` = `cms_virtuemart_product_manufacturers`.`virtuemart_product_id` LEFT OUTER JOIN `cms_virtuemart_shoppergroups` as s ON s.`virtuemart_shoppergroup_id` = `cms_virtuemart_product_shoppergroups`.`virtuemart_shoppergroup_id` 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%") AND p.`published`="1" AND ( s.`virtuemart_shoppergroup_id`= "1" OR s.`virtuemart_shoppergroup_id` IS NULL ) ) group by p.`virtuemart_product_id` ORDER BY product_name ASC LIMIT 0, 10