Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General » Mysql »

Como optimizar consulta con randon

Estas en el tema de Como optimizar consulta con randon en el foro de Mysql en Foros del Web. gente la cuestione s asi , tengo un script en mi web qeu hice hace unos dias , que devuelve mediante una consulta un video ...
  #1 (permalink)  
Antiguo 30/05/2009, 21:50
Avatar de EmaD  
Fecha de Ingreso: marzo-2008
Mensajes: 93
Antigüedad: 16 años, 1 mes
Puntos: 2
Como optimizar consulta con randon

gente la cuestione s asi , tengo un script en mi web qeu hice hace unos dias , que devuelve mediante una consulta un video entre unos 250 que hay en la base de datos de mi web.

la consulta es esta.

Código:
SELECT id,title,id_author FROM videos
                    ORDER BY RAND() LIMIT 0, 1
Como puedo hacer para optimizarla , por lo que lei no es la mejor forma de hacerlo.

Estee s el codigo qeu uso para mostrarla en un bloque de mi web en php.

Código PHP:

        
        
<?php
error_reporting
(0);
class 
videos_randon
    
{
     var 
$content;
    
    function 
videos_randon()
        {
        global 
$website

    
$this->content='<h1>Tu Video</h1>'
        
$this->content.='<div class="block_content"><p>';
        
//aca la consulta con el RAND()

 
$result mysql_query("SELECT id,title,id_author FROM videos
                    ORDER BY RAND() LIMIT 0, 1"
);
           

                
           
$data mysql_fetch_array($result);
                            
                    
$title=remove_html(cut($data['title'],100));
                    
$title2=remove_html($data['title']);
                    
$paraenlace GetQuitarAcentos($title2);
                    
                    
$this->content.="    <center>                

<a href=\"VIDEO-"
.$data['id']."-".$paraenlace.".htm\" onMouseOver=\"return overlib('".$title2."', CAPTION, 'Tu Video Aleatorio')\" onMouseOut=\"return nd();\">";
                                
                    
$this->content.= $title.'';
                    
$this->content.= '<br><img src="images/rvideo.jpg">';

                    
$this->content.= '</a></center>';
                        
        
         
$this->content.="</p></div>";
        
         
         
         
        }
        
        function 
display()
        {
        return 
$this->content;
        }    
        
        }
        
?>
Salu2 y gracias por su tiempo
  #2 (permalink)  
Antiguo 30/05/2009, 22:11
Avatar de huesos52
Colaborador
 
Fecha de Ingreso: febrero-2009
Ubicación: Manizales - Colombia
Mensajes: 5.980
Antigüedad: 15 años, 2 meses
Puntos: 360
Respuesta: Como optimizar consulta con randon

mira este articulo.

http://www.tallerwebmaster.com/Tutor...SQL-c-132.html

Un saludo.
__________________
Without data, You are another person with an opinion.
W. Edwads Deming
  #3 (permalink)  
Antiguo 30/05/2009, 23:01
Avatar de EmaD  
Fecha de Ingreso: marzo-2008
Mensajes: 93
Antigüedad: 16 años, 1 mes
Puntos: 2
Respuesta: Como optimizar consulta con randon

huesos gracias por contestar , sabes he leido ese articulo justamente cuando estaba haciendo el script y no logre entenderlo , lo unico que entendi es como hacerlo de mala manera jeje por eso o hice asi.


Alguna otra ayudita?

Muchas gracias
  #4 (permalink)  
Antiguo 30/05/2009, 23:50
Avatar de huesos52
Colaborador
 
Fecha de Ingreso: febrero-2009
Ubicación: Manizales - Colombia
Mensajes: 5.980
Antigüedad: 15 años, 2 meses
Puntos: 360
Respuesta: Como optimizar consulta con randon

EmaD

Que parte no entendiste?

En este post recomiendan la opción 2.

Tendrías que valerte de una consulta de conteo:
select count(*) from videos;

Desde php conseguir un numero aleatorio con entre 0 y el numero de registros.

Con ese numero aleatorio valerse de la clausula limit.

$result = mysql_query("SELECT id,title,id_author FROM videos
LIMIT $aleatorio, 1");

fijate que selecciona directamente un registro y evita que el sistema ordene primero todos los registros para escoger uno.
Por esta razón es mucho mas eficiente.

Trata de implementarlo y compara performance.

si tienes problemas, postea de nuevo.

un saludo.
__________________
Without data, You are another person with an opinion.
W. Edwads Deming
  #5 (permalink)  
Antiguo 31/05/2009, 23:23
Avatar de EmaD  
Fecha de Ingreso: marzo-2008
Mensajes: 93
Antigüedad: 16 años, 1 mes
Puntos: 2
Respuesta: Como optimizar consulta con randon

Listo ya lo logre , gracias por la ayuda .

Código PHP:
 $sql "SELECT COUNT(*) AS cant
    FROM videos"
;
    
    
    
    
$resp mysql_query($sql);
    
    
    
$aleatoriorand(0,$resp-1);
    
    
    
$sql2 "    SELECT
        id,
        title,
        id_author
    FROM videos
    LIMIT "
.$aleatorio.",1 ";
    
        
$result mysql_query($sql2);
        
        
                

                
           
$data mysql_fetch_array($result);
                            
                    
$title=remove_html(cut($data['title'],100));
                    
$title2=remove_html($data['title']);
                    
$paraenlace GetQuitarAcentos($title2);
                    
                    
$this->content.="    <center>                

<a href=\"VIDEO-"
.$data['id']."-".$paraenlace.".htm\" onMouseOver=\"return overlib('".$title2."', CAPTION, 'Tu Video Aleatorio')\" onMouseOut=\"return nd();\">";
                                
//$enlace = 'REVIEW'-'$data['id']'-'.$paraenlace.'.htm';
                    
$this->content.= $title.'';
                    
$this->content.= '<br><img src="images/rvideo.jpg">';

                    
$this->content.= '</a></center>';
                        
        
         
$this->content.="</p></div>"

Última edición por EmaD; 31/05/2009 a las 23:51
  #6 (permalink)  
Antiguo 01/06/2009, 07:47
Avatar de huesos52
Colaborador
 
Fecha de Ingreso: febrero-2009
Ubicación: Manizales - Colombia
Mensajes: 5.980
Antigüedad: 15 años, 2 meses
Puntos: 360
Respuesta: Como optimizar consulta con randon

Me alegra EmaD
__________________
Without data, You are another person with an opinion.
W. Edwads Deming
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 18:52.