Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Gustavo <guh> Silva

Limitar Resultados em Tabela com INNER JOIN e LEFT JOIN

Recommended Posts

Olá!

 

Gostaria de saber se é possível limitar essa consulta em cinco resultados:

 

SELECT a.*

FROM #__content AS a

LEFT JOIN #__content_frontpage AS f ON f.content_id = a.id

INNER JOIN #__categories AS c ON c.id = a.catid

INNER JOIN #__users AS u ON u.id = a.created_by

WHERE a.state = 1

AND a.introtext LIKE '%<img src%'

AND f.content_id IS NULL

AND c.published = 1

AND c.id = 78

ORDER BY a.publish_up DESC

LIMIT 5

 

Estou preparando um módulo para o Joomla 2.5 e me deparei com essa dificuldade.

Se a consulta não for limitada, acredito que a aplicação ficará lenta a medida que o banco de dados for crescendo.

 

Desde já agradeço.

Abraço!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olá!

 

Gostaria de saber se é possível limitar essa consulta em cinco resultados:

 

SELECT a.*

FROM #__content AS a

LEFT JOIN #__content_frontpage AS f ON f.content_id = a.id

INNER JOIN #__categories AS c ON c.id = a.catid

INNER JOIN #__users AS u ON u.id = a.created_by

WHERE a.state = 1

AND a.introtext LIKE '%<img src%'

AND f.content_id IS NULL

AND c.published = 1

AND c.id = 78

ORDER BY a.publish_up DESC

LIMIT 5

 

Estou preparando um módulo para o Joomla 2.5 e me deparei com essa dificuldade.

Se a consulta não for limitada, acredito que a aplicação ficará lenta a medida que o banco de dados for crescendo.

 

Desde já agradeço.

Abraço!

 

Pessoal, resolvi o problema.

Existia um conflito dentro da aplicação do Joomla que me impedia de usar a função LIMIT no MySQL.

 

O código ficou assim:

 

$app = JFactory::getApplication();
$db = JFactory::getDbo();

$nullDate = $db->getNullDate();
$date =& JFactory::getDate();
$now = $date->toMySQL();

$query = 'SELECT a.*' .
   ' FROM #__content AS a' .
   ' LEFT JOIN #__content_frontpage AS f ON f.content_id = a.id' .
   ' INNER JOIN #__categories AS c ON c.id = a.catid' .
   ' INNER JOIN #__users AS u ON u.id = a.created_by' .
   ' WHERE (c.id = ' . implode( ' OR c.id = ', $catids ) . ')' .
   ' AND c.published = 1' .
   ' AND f.content_id IS NULL' . 
   ' AND a.state = 1' .    
   ' AND (a.publish_up = ' . $db->Quote($nullDate) . ' OR a.publish_up <= ' . $db->Quote($now) . ')' .
   ' AND (a.publish_down = ' . $db->Quote($nullDate) . ' OR a.publish_down >= ' . $db->Quote($now) . ')' .
   ' AND a.introtext LIKE "%<img src%"' .
   ' ORDER BY a.publish_up DESC';

$db->setQuery($query, $init, $count); // esse método gerava o conflito, então fiz $init = 0 e $count = 5, limitando os resultados da consulta
$rows = $db->loadObjectList();

 

Esse problema me fez pensar que era impossível usar LIMIT junto a INNER JOIN ou LEFT JOIN, porém, após alguns testes, verifiquei estar enganado.

 

Obrigado.

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.