Очень поздно, но у меня была такая же проблема и она была решена по-другому: в разделе запроса JOIN
я вставил другой запрос с другим дескриптором. Если запрос мне нужно запустить что-то вроде
SELECT
st.*, m.measures
FROM tbl_stations st
INNER JOIN (
SELECT
station_id, count(*) AS measures
FROM tbl_measures
GROUP BY station_id
) m ON m.station_id = st.id
затем создать ручки для двух элементов запроса
$query = $db->getQuery(true);
$innerSelect = $db->getQuery(true);
, а затем я создаю JOOMLA часть запроса:
$query
->select(array('st.*', 'm.measures'))
->from($db->quoteName('#__stations', 'st'))
//here starts the inner join part (note the opening parenthesis)
->innerJoin('(' .
//I perform a canonical select using the second handle
$innerSelect
->select($db->quoteName('station_id'))
->select('count(*) as measures')
->from($db->quoteName('#__measures'))
->group($db->quoteName('station_id'))
//after closing the parenthesis I put an alias for the join
//and then I have the "ON" clause of the join
. ') ' . $db->quoteName('m') . ' ON ' . $db->quoteName('m.station_id') . ' = ' . $db->quoteName('st.id'))
;
Это он.Окончательный запрос (кстати, вы можете повторить его с помощью метода $query->dump()
) заключается в следующем
SELECT st.*,m.measures
FROM `tbl__stations` AS `st`
INNER JOIN (
SELECT `station_id`,count(*) as measures
FROM `tbl__measures`
GROUP BY `station_id`) `m` ON `m`.`station_id` = `st`.`id`
Надеется, что это может оказаться полезным для тех, кто проходил мимо с тем же сомнением об использовании SELECT
внутри JOIN
с.
http://docs.joomla.org/Selecting_data_using_JDatabase – Lodder
Да, я уже прочитал это, но я не вижу ответа на вопрос. Не могли бы вы сказать мне, где вы можете увидеть ответ? – kampro
Если вы посмотрите на [это] (http://docs.joomla.org/Selecting_data_using_JDatabase#Selecting_Records_from_Multiple_Tables), вы увидите часть 'INNER' запроса, которая содержит' $ db-> quoteName ('#__ users', ' b ') 'перед' ON' – Lodder