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

Статус
В этой теме нельзя размещать новые ответы.

o_nix

Хранитель порядка
Регистрация
7 Ноя 2007
Сообщения
1.070
Реакции
1.063
Собственно объединяю два разных движка, пришлось две таблицы объеденить в одну тк многие данные в них дублировили друг друга, часть недостающих полей перенёс из таблицы "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 - что за приставки через точку перед названием столбца ??

я понимаю что идёт какаято перекрёстная выборка из двух разных таблиц но нефига немогу понять что именно она делает и в каком порядке - соответственно непонятно как мне надо переделать чтоб работало обращаясь к другой таблице.
 
в MySQL можно давать сокращенные имена таблицам, полям, и кажется базам данный
сокращения действуют только на конкретный запрос
задается алиас так:
Код:
table_name \[AS\] t
и помещается там, где вы обычно пишите table_name
слово AS -необязательное
в вашем случае
Код:
ss_products p

запись же чере точку - это указание таблицы из которой берется поле.
то есть p.name - это name из таблицы p.
а p - это алиас для таблицы ss_products

опдробнее в справочнике
 
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)."' 
...
 
polyetilen
Огромное спасибо :)

думаю что такое развёрнутое пояснение sql запроса можно перенести в топ ветки MySQL как faq.
всё чётко подробно и понятно - для новичков самое то.
 
Статус
В этой теме нельзя размещать новые ответы.
Назад
Сверху