web-dev-qa-db-fra.com

Requête MySQL SELECT avec LIMIT pour afficher un maximum de 3 images

Je souhaite afficher jusqu'à 3 images attribuées à l'utilisateur connecté dans une table de base de données. J'ai écrit la requête MySQL suivante:

    $db = JFactory::getDBO();
    //GET GALLEERY IMAGES
    $query = $db->getQuery(true);
    $query->select('*');
    $query->from('#__mcloud_mgallery');
    $query->where('model_id = '.$userid);
    $query->order('id');
    $db->setQuery($query);
    $rows = $db->loadObject();

    $gallery_img = $rows->file;

Si j'écho $gallery_img Cela ne produit qu'une seule des images, si je regarde dans la table de la base de données (pour l'utilisateur connecté), 3 images sont attribuées à cet utilisateur:

id      file                    model_id

389     10_burgers_food.jpeg    941
390     14_bridge.jpeg          941
391     test_imag.jpeg          941

Comment puis-je afficher les 3 images s'il n'y a qu'une seule variable $gallery_img?

1
RustyJoomla

Le problème, c'est que vous utilisez loadObject() qui ne renverra jamais qu'un résultat. Si vous voulez plusieurs, vous devrez utiliser loadObjectList(), comme ceci:

$db = JFactory::getDbo();

$query = $db->getQuery(true);
$query->select('*')
      ->from($db->qn('#__mcloud_mgallery'))
      ->where($db->qn('model_id') . ' = ' . $userid)
      ->order('id');
$db->setQuery($query);

$rows = $db->loadObjectList();

foreach ($rows as $row)
{
    echo '<p>' . $row->file . '</p>';
}

Au cas où il y aurait jamais plus de 3 images dans la base de données, vous pouvez également limiter les résultats de la requête à 3, comme ceci:

$query->select('*')
      ->from($db->qn('#__mcloud_mgallery'))
      ->where($db->qn('model_id') . ' = ' . $userid)
      ->order('id')
      ->setLimit('3'); // <-- Here
$db->setQuery($query);

J'espère que cela t'aides

4
Lodder