Foros del Web » Programando para Internet » PHP »

Limitar números de bucles de un While

Estas en el tema de Limitar números de bucles de un While en el foro de PHP en Foros del Web. Uso en mysql un campo multivaluado donde inserto varias ID referentes a distintas categorías a las que pertenece un artículo. Me respondieron en una consulta ...
  #1 (permalink)  
Antiguo 12/12/2011, 06:33
 
Fecha de Ingreso: julio-2009
Mensajes: 172
Antigüedad: 15 años, 4 meses
Puntos: 3
Limitar números de bucles de un While

Uso en mysql un campo multivaluado donde inserto varias ID referentes a distintas categorías a las que pertenece un artículo. Me respondieron en una consulta que eso esta prohibido por MySQL y que tengo que crear una tabla adicional. No tengo ganas de crear más tablas y le he dado la vuelta al problema, escribiendo un script en php que extrae la ID de entre todas las que pueda contener el campo y problema resuelto.

En consecuencia, me crea otro problema a la hora de usar paginaciones y lo que necesito saber es si puedo limitar la cantidad o mejor dicho, el numero de bucles.

Supongamos que en la categoría con ID 7 muestra 38 artículos. Yo quiero poder limitar el bucle de manera que muestre 10 artículos sin limitar el código mysql. Y que se pueda escoger el inicio, por ejemplo a partir del bucle 11 al 20.

Se que me vais a contestar que limite mysql. Pero en este caso, limitar mysql no es compatible con el script php que he creado. Y solo pensar en tener que crear más tablas para lo que quiero me estresa :)

Aquí un ejemplo para que tengáis una idea.

Código PHP:
Ver original
  1. $sql='select * from articulo';
  2. $query=mysql_query($sql);
  3. while($result=mysql_fetch_array($query)) /// Este bucle mostrara todos los artículos
  4. {
  5.     $listar_tag         =   strrpos($result['tag_id'], $_GET['tag']); /// Busca la ID del tag en el campo tag_id artículo por artículo
  6.     $listar_categoria   =   strrpos($result['cat_id'], $_GET['cat']); /// Busca la ID de la categoría en el campo cat_id artículo por artículo             
  7.  
  8.     //// Ahora, condiciones IF para que muestre segun la categoría o el tag seleccionado via GET
  9.    
  10.     if($result_tag == $_GET['tag'] && $result_categoria == $_GET['cat'])
  11.     {
  12.    
  13.         Este Scritp mostrara los resultados que coincidan con el tag y la categoría seleccionada, desechando los demas.
  14.    
  15.     }
  16.  
  17.  
  18. }
  #2 (permalink)  
Antiguo 12/12/2011, 08:03
Avatar de maycolalvarez
Colaborador
 
Fecha de Ingreso: julio-2008
Ubicación: Caracas
Mensajes: 12.120
Antigüedad: 16 años, 3 meses
Puntos: 1532
Respuesta: Limitar números de bucles de un While

obviamente tu problema está en el modelo de datos, donde debes de tener una relación muchos a muchos con categorías, lo que equivale a 3 tablas, sinceramente no entiendo el porque de tu modelo actual, en dado caso para poder limitar y paginar por un ID especifico deberías hacer un filtro con LIKE en la consulta, eso con los consecuentes problemas como por ejemplo:

si intento buscar "17" usaría: WHERE categoría LIKE '%17%'

Pero coincidirá con posibles cadenas 170, o 117, etc, etc. etc.

otra opción es usar expresiones regulares, suerte
__________________
¡Por favor!: usa el highlight para mostrar código
El que busca, encuentra...
  #3 (permalink)  
Antiguo 12/12/2011, 08:58
 
Fecha de Ingreso: julio-2009
Mensajes: 172
Antigüedad: 15 años, 4 meses
Puntos: 3
Respuesta: Limitar números de bucles de un While

Bendito LIKE

Pues consulte esto en el foro de mysql y me decían que era imposible y que estaba prohibido pero así me ahorro muchos script php, tablas, campos y datos amen que puedo paginar más cómodamente.

Voy a poner un ejemplo bien redactado por si alguien tiene el mismo problema o la misma consulta ya que no hay artículos sobre esto. Intentare explicarlo muy claramente a la mayor brevedad.

Tenemos en este caso, una página de videos que se distribuyen en géneros y categorías. Donde cada video puede estar vinculado a una o más categorías y uno o más géneros.

Paso previo a todo esto, creamos una tabla para establecer los géneros y otra para establecer las categorías donde cada genero y categoría tendrá su propia ID en un campo primario auto incrementable.

Ahora supongamos que tengo mi página en marcha. Yo entro e mi página y veo la lista de todo los últimos videos. Pero quiero que se puedan ver por género, por categoría o por genero y categoría.
Creamos dos campos en la tabla del video donde los llamamos sex_id para genero y cat_id para categoría. Que sea de tipo text.
Ahora, cada vez que insertemos un video, en cada campo se añade las Ids correspondientes de género y categoría al que corresponda. Por ejemplo:

cat_id: ,1, ,5, ,45, ,48,
sex_id: ,2, ,5, ,8,

Al final de cada ID es importante añadir un carácter al principio y otro al final, como puede ser en este caso una coma, para si evitar que interfieran con otras cadenas.

En mi caso, pongo en el navegador index.php?sex=$id&cat=$id para determinar los videos con que género y que categoría quiero mostrar
A demás, quiero poder paginar.

Pues aquí el código que esta funcionado en mi web:

Código PHP:
Ver original
  1. <?php
  2.  
  3. $pagina_video=$_GET['pagina']*12; /// Número de artículos por página
  4.  
  5. $num_sex=','.$_GET['sex'].','; /// Le decimos que busque el número ID que ofrecemos via GET + la coma al principio y final del número para no confundir cadenas
  6. $num_cat=','.$_GET['cat'].','; /// Le decimos que busque el número ID que ofrecemos via GET + la coma al principio y final del número para no confundir cadenas
  7.  
  8. /// Bucle que mostrara los videos segun el género sexual y categoría
  9. $sql_listar_genero_categoria='select * from videos where sex_id LIKE "%'.$num_sex.'%" AND cat_id LIKE "%'.$num_cat.'%" order by id desc limit '.$pagina_video.', 12';
  10. $query_listar_genero_categoria=mysql_query($sql_listar_genero_categoria);
  11. while($result_listar_genero_categoria=mysql_fetch_array($query_listar_genero_categoria))
  12. {
  13. ?>
  14.     <li>
  15.             <div class="clear padding10"></div>
  16.         <a title="<?=$result_listar_genero_categoria['titulo']?>" class="magnific-glass-small" href="/videos/video-<?=$result_listar_genero_categoria['id']?>.html">
  17.             <img src="<?=$result_listar_genero_categoria['imagen']?>" width="100" height="100" alt="Imagen perdida" />
  18.         </a>
  19.             <div class="clear padding10"></div>                
  20.     </li>                          
  21. <?php
  22. }                      
  23. ?>

Etiquetas: bucles, limitar, mysql, sql, tabla
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 09:13.