1. Este site usa cookies. Ao continuar a usar este site está a concordar com o nosso uso de cookies. Saber Mais.

Limitar Resultados em Tabela com INNER JOIN e LEFT JOIN

Discussão em 'Programação' iniciada por Gustavo Silva, 18 de Abril de 2012. (Respostas: 3; Visualizações: 1211)

  1. 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!
     
  2. tripas

    tripas To fold or to FOLD?

    você acredita ou tem a certeza? É que são coisas muito distintas...
     
  3. Boas
    Se a base de dados for SQL pode fazer um TOP 5,se for MySQL pode fazer um LIMIT 0,5.
    Cumps
     
  4. 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:
    PHP:
    $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.
     

Partilhar esta Página