Непонятная выборка MySQL

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

Статус темы:
Закрыта.
Модераторы: latteo
  1. o_nix

    o_nix

    Регистр.:
    7 ноя 2007
    Сообщения:
    1.073
    Симпатии:
    1.039
    Собственно объединяю два разных движка, пришлось две таблицы объеденить в одну тк многие данные в них дублировили друг друга, часть недостающих полей перенёс из таблицы "ss_customers" в таблицу "pmd_users" - которая взята за основу.

    В двиге имеем sql запрос котрый ну никак неполучается переделать применительно к таблице "pmd_users"
    Код:
    "SELECT productId,p.name as name,c.shopname as shopname,brief_description,picturePath,Price FROM ss_products p, ss_customers c WHERE p.shopid=c.customerid and p.name='$name' and p.categoryID='$cat' and p.enabled=1 order by Price"
    кто шарит напишите пожалуйста что такое p.name - что за приставки через точку перед названием столбца ??

    я понимаю что идёт какаято перекрёстная выборка из двух разных таблиц но нефига немогу понять что именно она делает и в каком порядке - соответственно непонятно как мне надо переделать чтоб работало обращаясь к другой таблице.
     
  2. Alternator

    Alternator

    Регистр.:
    23 мар 2009
    Сообщения:
    295
    Симпатии:
    145
    в MySQL можно давать сокращенные имена таблицам, полям, и кажется базам данный
    сокращения действуют только на конкретный запрос
    задается алиас так:
    Код:
    table_name \[AS\] t
    и помещается там, где вы обычно пишите table_name
    слово AS -необязательное
    в вашем случае
    Код:
    ss_products p
    запись же чере точку - это указание таблицы из которой берется поле.
    то есть p.name - это name из таблицы p.
    а p - это алиас для таблицы ss_products

    опдробнее в справочнике
     
    o_nix нравится это.
  3. polyetilen

    polyetilen Заблокирован

    Регистр.:
    10 авг 2006
    Сообщения:
    814
    Симпатии:
    474
    SELECT (выбираем)
    productId, (название колонки а таблица не указана значит эта колонка присутствует только в одной таблице)
    p.name as name, (берём колонку name из таблицы ss_products и называем эту колонку как name, хотя она и так name так что можно просто p.name)
    c.shopname as shopname, (колонка shopname из таблицы ss_customers и названа как shopname)
    brief_description,
    picturePath,
    Price
    FROM ss_products p, ss_customers c (тут две таблицы ss_products или короче p, другая таблица ss_customers её назвали c, или по sql стандарту можно: ss_customers AS c)
    WHERE (берутся данные из обоих таблиц но с условием что)
    p.shopid=c.customerid (в таблице ss_products значение в колонке shopid должно быть равно значению из таблицы ss_customers в колонке customerid)
    AND p.name='$name' (и ещё условие что колонка name в таблице ss_products должен быть равен переменной $name которую подставляет php скрипт)
    AND p.categoryID='$cat' (и ещё условие что колонка categoryID в таблице ss_products должен быть равен переменной $cat которую подставляет php скрипт)
    AND p.enabled=1 (и ещё условие что колонка enabled в таблице ss_products всегда должна быть равна 1)
    order by Price (результат сортируем по колонке Price, если такая колонка только в одной таблице то таблицу можно не указывать)

    ещё надо экранировать кавычки (и другие спец символы которые использует mysql) у значения переменных, которые проходят из php в запрос, например так:
    Код:
    ...
    AND p.name='".mysql_real_escape_string($name)."' AND p.categoryID='".mysql_real_escape_string($cat)."' 
    ...
    
     
    o_nix нравится это.
  4. o_nix

    o_nix

    Регистр.:
    7 ноя 2007
    Сообщения:
    1.073
    Симпатии:
    1.039
    polyetilen
    Огромное спасибо :)

    думаю что такое развёрнутое пояснение sql запроса можно перенести в топ ветки MySQL как faq.
    всё чётко подробно и понятно - для новичков самое то.
     
Статус темы:
Закрыта.