elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Usando Git para manipular el directorio de trabajo, el índice y commits (segunda parte)


+  Foro de elhacker.net
|-+  Programación
| |-+  Desarrollo Web
| | |-+  PHP (Moderador: #!drvy)
| | | |-+  Necesito ayuda con SQL :-)
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Necesito ayuda con SQL :-)  (Leído 1,238 veces)
Brida

Desconectado Desconectado

Mensajes: 47



Ver Perfil WWW
Necesito ayuda con SQL :-)
« en: 13 Agosto 2013, 04:49 am »

¡Hola a todos y gracias por la ayuda que me puedan aportar!

Os comento, tengo una base de datos que guarda categorías y sub-categorías (categorías dentro de las categorías principales), la tabla es algo así:

IDnombrecategoria_de
1Nuestros Servicios0
2Arreglar ordenadores1
3Reparar móviles1
4Contactar0

* categoría_de = 0; Es la principal


Lo que necesitaría es montar el menú con ul,li pero me han pedido que lo haga con las mínimas consultas posibles.

A mi se me había ocurrido hacer un

SELECT * FROM tabla WHERE categoria_de = 0

Y luego cuando lo recorra volver hacer la consulta con cada uno para ver si tiene sub-categoría, pero estoy seguro que se podrá hacer de alguna otra forma.

¿Cómo lo haríais vosotros/as?

Saludos y gracias por leerme.


En línea

#!drvy
Moderador
***
Desconectado Desconectado

Mensajes: 5.592



Ver Perfil WWW
Re: Necesito ayuda con SQL :-)
« Respuesta #1 en: 13 Agosto 2013, 06:25 am »

Si vas a hacerlo solo de 1 nivel (principal -> submenu) y que no haya mas niveles (principal -> submenu -> submenu) es bastante facil y se puede hacer con una sola consulta.

Teniendo la siguiente estructura:



Puedes hacer lo siguiente:

Código
  1. <?php
  2.  
  3. $link = mysqli_connect('localhost','root','toor','test');
  4. $result = mysqli_query($link,'SELECT ID, nombre, categoria_de FROM brida');
  5.  
  6. /* declarar como array (strict) */
  7. $menu = array();
  8.  
  9. while($row = $result->fetch_array()){
  10.   // Si categoria_de es menor a 1 se considera como principal
  11.   if($row['categoria_de']<1){
  12.      // y se añade el nombre con index ID en el $menu.
  13.      $menu[$row['ID']] = array($row['nombre']);
  14.   } else {
  15.      // Si categoria_de es mayor, se considera como subcategoria
  16.      // asi que se añade al index de categoria_de.
  17.      $menu[$row['categoria_de']][]=$row['nombre'];
  18.   }
  19. }
  20.  
  21. /* Menu */
  22. echo '<ul>';
  23. // Por cada principal
  24. foreach($menu as $principal){
  25.   // Imprimimos un li y su nombre.
  26.   echo '<li>'.$principal[0];
  27.   echo '<ul>';
  28.   // Quitamos el nombre para que no se repita.
  29.   unset($principal[0]);
  30.   // Por cada subcategoria
  31.   foreach($principal as $sub){
  32.      // Imrpimimos nombre.
  33.      echo '<li>'.$sub.'</li>';
  34.   }
  35.   // Cerrar principal.
  36.   echo '</ul></li>';
  37. }
  38. ?>

Y el resultado sera:

  • Nuestros servicios
    • Arreglar Ordenadores
    • Reparar Moviles
  • Cotactar
    • Por email
    • Por correo

Saludos


En línea

:ohk<any>


Desconectado Desconectado

Mensajes: 1.740


Yo lo que quiero que me salga bien es la vida.


Ver Perfil WWW
Re: Necesito ayuda con SQL :-)
« Respuesta #2 en: 13 Agosto 2013, 16:44 pm »

Vaya, te has tomado la molestia de hacer el código.
En línea

Y es que a veces pienso que si no estuviera loco no podría salir adelante.
Lo que no se es capaz de dar, en realidad no se posee, uno es poseído por ello.
Brida

Desconectado Desconectado

Mensajes: 47



Ver Perfil WWW
Re: Necesito ayuda con SQL :-)
« Respuesta #3 en: 14 Agosto 2013, 00:43 am »

Muchas gracias drvy, este foro tendría que tener alguna forma de agradecer a la gente como tú.


ohk, hizo mal en poner el código? :'(
En línea

#!drvy
Moderador
***
Desconectado Desconectado

Mensajes: 5.592



Ver Perfil WWW
Re: Necesito ayuda con SQL :-)
« Respuesta #4 en: 14 Agosto 2013, 00:51 am »

Citar
Vaya, te has tomado la molestia de hacer el código.

Es que no sabia como explicarlo con palabras xD

Citar
ohk, hizo mal en poner el código? :'(

En teoría, solo hay que ayudar en los problemas pero de tal modo que el usuario se haga su propio código. Así al menos aprenden algo xD.

Saludos
En línea

Brida

Desconectado Desconectado

Mensajes: 47



Ver Perfil WWW
Re: Necesito ayuda con SQL :-)
« Respuesta #5 en: 14 Agosto 2013, 00:57 am »

Pues muchas gracias, luego veré bien el código y a ver si me sale a la primera.


Mil gracias!
En línea

Brida

Desconectado Desconectado

Mensajes: 47



Ver Perfil WWW
Re: Necesito ayuda con SQL :-)
« Respuesta #6 en: 14 Agosto 2013, 02:56 am »

Vale, me funciona perfectamente, pero por si alguien lo necesita (ya que el código es tuyo) pongo el código modificado, lo he modifico que habían unos pequeños fallos y es que no se cerraba los </ul>.
Además he cambiado los echo por variables para imprimir por si se realiza desde una función, como en mi caso que programo en POO.

Código
  1. EDITADO
  2.  

Muchas gracias a todos!!!



EDITO

Al final no me ha servido ya que me daba fallos, tenía problemas con el ul y los li, así que me he fijado en la idea y lo he hecho desde cero, os paso el código por si os sirve:

Código
  1. $link = mysqli_connect('localhost','root','toor','test');
  2. $result = mysqli_query($link,'SELECT ID, nombre, categoria_de FROM brida');
  3.  
  4. while($va = $re->fetch_array()){
  5.  
  6. if($va['padre']==0){
  7. $menu[$va['ID']] = array($va['nombre']);
  8. } else {
  9. $menu[$va['padre']]["sub"][]=$va['nombre'];
  10. }
  11. }
  12.  
  13. /* Crea el Menú */
  14. $menuvar.='<ul>';
  15. foreach($menu as $principal => $valor){
  16.  
  17. // Si tiene sub...
  18. if(empty($valor["sub"])){
  19. // Si no tiene sub
  20. $menuvar.='<li>'.$valor[0].'</li>';
  21. }else{
  22. // Si tiene sub
  23. $menuvar.='<li class="sub">'.$valor[0].'<ul>';
  24. foreach($valor["sub"] as $sub => $subvalor){
  25. $menuvar.='<li>'.$subvalor.'</li>';
  26. }
  27. $menuvar.='</ul>';
  28. }
  29. }
  30. $menuvar.='</ul>';
  31.  
  32. return $menuvar;
  33.  

Como se ve lo que cambio principalmente es poner el array del tipo $va[ID]["sub"], para así comprobar más fácilmente si tiene subs o no.

De todos modos, muchísimas gracias por todo, no se me habría ocurrido tu idea, supongo que es como la gente lo hace :-P

Saludos!
« Última modificación: 14 Agosto 2013, 04:46 am por Brida » En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines