New question

Question:

Date: 08-02-2020 11:07:34 (In Spanish)

Como mostrar aleatoria mente los producto publicados[Resolved]

Hola comunidad, estoy desarrollando una tienda y quiero que me salga de forma aleatoria los artículos en venta, se que eso se hace con la función rand en PHP, pero me sale error y no se que estoy haciendo mal, por favor si alguien es experto en esta arena le pido una mano. Aquí les voy a dejar el código en el que saco todos los productos publicados que están en la base de datos.

<?php

// Sacar el nombre de la persona que ha iniciado sesion
$stmt = $conexion->query("SELECT photo_perfil FROM users INNER JOIN product ON product.user_id = users.id");
$stmt->execute(['email' => $email]);
while ($row = $stmt->fetch()) {
    $photo_vendedor = $row['photo_perfil'];
}

// Sacar el nombre de la persona que ha iniciado sesion
$stmt = $conexion->query("SELECT * FROM product");
$stmt->execute(['email' => $email]);
while ($row = $stmt->fetch()) {
    $id = $row['id'];
    $user_id = $row['user_id'];
    $title = $row['title'];
    $description = $row['description'];
    $moneda = $row['moneda'];
    $price = $row['price'];
    $ubication = $row['ubication'];
    $video = $row['video'];
    $miniatura = $row['miniatura'];
    $images = $row['images'];
    $category = $row['category'];
    $state = $row['state'];
    $create_at = $row['create_at'];
?>
  <!-- Contenido con los card -->
<section>
  <article class="col s12 m6 xl3">
          <a href="detail">
              <div class="row">
                  <div class="col s12 m12 xl12">
                    <div class="card">
                      <div class="card-image">
                        <img src="./miniaturas/<?=$miniatura?>" alt="Miniatura del producto">
                        <a class="btn-floating halfway-fab waves-effect waves-light red"><img src="photo-perfil/<?=$photo_vendedor?>" class="circle" alt="Foto de perfil del vendedor" title="Foto del vendedor"></a>
              </a> <!-- Final del enlace de la imagen -->
                      </div>
                      <a href="" class="black-text">
                          <div class="card-content">
                              <h1 class="card-title" title="Vendo casa con marquecina"><?=$title?></h1>
                          <p><?=$description?></p>
                          <b class="green-text">$<?=$price?></b>
                          </div>
                      </a> <!-- Final del enlace de los titulos y el precio -->
                    </div>
                  </div>
                </div>
      </article>
</section> <!-- Fin de un card -->
<?php } ?>
  <!-- Modal de ayuda -->
  <?php require_once('modal/modal.ayuda.php') ?>
Tags: PHP Votes: 0 - Answers: 2 - Views: 7 Share on: Google Facebook Twitter LinkedIn Link
 

Answers:

  • Date: 09-02-2020 05:48:33 Hola amigos, ya he resuelto esta pregunta, solamente tuve que colocar la función RAND() de sql en mi consulta de SQL.

    Fue algo mas o menos de esta manera
    SELECT * FROM product ORDER BY RAND()


    Ojo tienes que colocar el antes del rand() ORDER BY para que pueda funciona, porque si no va a dar errror.

    De todas formas, voy a dejar el código ya resuelto.
    <?php
    
    // Sacar el toda la información del producto que se ha publicado
    $stmt = $conexion->query("SELECT * FROM product ORDER BY RAND()");
    $stmt->execute(['email' => $email]);
    while ($row = $stmt->fetch()) {
        $photo_vendedor = $row['photo_perfil'];
        $id = $row['id'];
        $user_id = $row['user_id'];
        $title = $row['title'];
        $description = $row['description'];
        $moneda = $row['moneda'];
        $price = $row['price'];
        $ubication = $row['ubication'];
        $video = $row['video'];
        $miniatura = $row['miniatura'];
        $images = $row['images'];
        $category = $row['category'];
        $state = $row['state'];
        $create_at = $row['create_at'];
    
    ?>
      <!-- Contenido con los card -->
    <section>
      <article class="col s12 m6 xl3">
              <a href="detail">
                  <div class="row">
                      <div class="col s12 m12 xl12">
                        <div class="card">
                          <div class="card-image">
                            <img src="./miniaturas/<?=$miniatura?>" title="<?=$title?>" alt="Miniatura del producto">
                            <a class="btn-floating halfway-fab waves-effect waves-light white">
                            
                            <img src="photo-perfil/<?=$photo_vendedor?>" class="circle" alt="Foto de perfil del vendedor" title="Foto del vendedor">
                            
                            </a>
                  </a> <!-- Final del enlace de la imagen -->
                          </div>
                          <a href="" class="black-text">
                              <div class="card-content">
                                  <h1 class="card-title"><?=$title?></h1>
                              <p><?=$description?></p>
                              <b class="green-text"><?=$moneda.' '.$price?></b>
                              </div>
                          </a> <!-- Final del enlace de los titulos y el precio -->
                        </div>
                      </div>
                    </div>
          </article>
    </section> <!-- Fin de un card -->
    <?php } ?>
      <!-- Modal de ayuda -->
      <?php require_once('modal/modal.ayuda.php') ?>


    Esta pregunta ya ha sido resuelta
      Votes: -1 - Link answer
     
  • Date: 10-02-2020 03:00:57 No te recomiendo usar ORDER BY RAND(), si tenés muchos registros en tu base eso puede generar un gran impacto en la performance (Básicamente le estás quitando al motor la posibilidad de usar cualquier índice para mejorar la consulta).

    Una mejor versión podría ser algo como:

    <?php
    
    // Sacar el toda la información del producto que se ha publicado
    $stmt = $conexion->query("SELECT id FROM product");
    $stmt->execute();
    $ids = [];
    
    while ( $row = $stmt->fetch(PDO::FETCH_ASSOC) ) {
        $ids[] = $row['id'];
    }
    
    $sql = "SELECT * FROM product WHERE id IN (";
    
    for ( $i = 0; $i < 5; $i++ ) { // Asumiendo que sean 5 productos que querés mostrar aleatoriamente
        $k = array_rand( $ids );
        $sql .= $ids[ $k ].", ";
        unset( $ids[ $k ] );
    }
    
    $sql .= substr( $sql, 0, -2 )." )";
    
    $stmt = $conexion->query($sql);
    
    while ($row = $stmt->fetch()) {
        $photo_vendedor = $row['photo_perfil'];
        $id = $row['id'];
    
        .... // Resto de tu script
    
      Votes: -1 - Link answer
     
To actively participate in the community first must authenticate, enter the system.Sign In