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

 

 


Tema destacado: Como proteger una cartera - billetera de Bitcoin


+  Foro de elhacker.net
|-+  Programación
| |-+  Desarrollo Web
| | |-+  Bases de Datos (Moderador: Carloswaldo)
| | | |-+  Dudas de consulta SQL
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] 2 3 Ir Abajo Respuesta Imprimir
Autor Tema: Dudas de consulta SQL  (Leído 10,755 veces)
Skeletron


Desconectado Desconectado

Mensajes: 1.731


A long way to go


Ver Perfil WWW
Dudas de consulta SQL
« en: 6 Diciembre 2009, 21:38 pm »

Hola gente..
Les comento lo siguiente:
Tengo una base de datos con 2 tablas:
Locales y Tipos

Locales tiene las siguientes columnas:
Nombre - Tipo - Direccion

Tipos tiene las sigueintes columnas:
ID - Tipo

Ok...
Locales.Tipo es un INTEGER. ese INTEGER, es igual al TIPO.ID del TIPO.Tipo que lleva el nombre del "TIPO" que es el local..
o sea..

Supongan que existe un local de comida rapida, entonces la entrada en LOCALES ES:
BurguerKing - 1 - Shoping

Y en la tabla TIPOS dice:
1 - Comidas Rapidas

Bien.. creo que me han entendido.. o no??

Ahora en PHP, quiero mostrar lo locales que tienen como direccion: "Pepe", y hacer un "echo" del siguiente tipo:
"El local de nombre: BurguerKing , es del tipo: Comidas Rapidas, y está en: Shoping"

Se entendió?
Como carajo sería ese SELECT?!?!?!?!?
         $res = mysql_query("SELECT * FROM locales l, tipos t WHERE l.calle='xxxx'");
         while($row = mysql_fetch_array($res)){
            echo "El local de nombre: " . $row[] . ", es del tipo: " . $row[] . "y esta en: " . $row[] . "<br>";
         }
Eso utilizo para mostrar los datos....

Me tiran una ayuda? :D


En línea

^Tifa^


Desconectado Desconectado

Mensajes: 2.804


Ver Perfil
Re: Dudas de consulta SQL
« Respuesta #1 en: 6 Diciembre 2009, 22:41 pm »

Supongo que preguntaras como hacer en el motor de base de datos lo que haces en php, puesto que en tu ejemplo mostrado con echo y usando los indices de cada variable debe funcionar perfectamente.

Ahora si preguntas como hacer lo mismo pero en el motor de DB. Tienes  2 opciones, o un procedimiento almacenado (mas comodo) o manualmente declarando variables temporales y usandolas dentro de tu consulta. Por ejemplo:

Imagina que tengo estas dos tablas:

Código
  1. mysql> SELECT * FROM tipo;
  2. +----+--------------------+
  3. | id | tipo               |
  4. +----+--------------------+
  5. |  1 | Comida Rapida      |
  6. |  2 | Comida semi-rapida |
  7. |  3 | Comida instantanea |
  8. +----+--------------------+
  9. 3 ROWS IN SET (0.00 sec)
  10.  
  11. mysql> SELECT * FROM locales;
  12. +------------+------+-----------------+
  13. | nombre     | tipo | direccion       |
  14. +------------+------+-----------------+
  15. | BurgerKing |    1 | Calle nadie #45 |
  16. | MacDonalds |    2 | Calle nadie #33 |
  17. | KFC        |    3 | Calle nadie #24 |
  18. +------------+------+-----------------+
  19. 3 ROWS IN SET (0.00 sec)
  20.  
  21.  

Con un procedimiento almacenado (Esto es un ejemplo en MySQL);

Código
  1. mysql> delimiter /
  2. mysql> CREATE PROCEDURE proceso(IN numero INTEGER)
  3.    -> BEGIN                                      
  4.    -> SET @nombre := 'El local de nombre : ';
  5.    -> SET @tipo := ' Es del tipo : ';
  6.    -> SET @direccion := ' Ubicado en : ';
  7.    -> SELECT concat(@nombre, locales.nombre, @direccion, locales.direccion, @tipo, tipo.id) FROM locales INNER JOIN tipo WHERE locales.tipo = numero AND tipo.id = locales.tipo;                                                          
  8.    -> END;
  9.    -> /
  10. Query OK, 0 ROWS affected (0.00 sec)
  11.  
  12. mysql> delimiter ;
  13. mysql> CALL proceso(1);
  14. +--------------------------------------------------------------------------------+
  15. | concat(@nombre, locales.nombre, @direccion, locales.direccion, @tipo, tipo.id) |
  16. +--------------------------------------------------------------------------------+
  17. | El LOCAL de nombre : BurgerKing Ubicado en : Calle nadie #45 Es del tipo : 1   |
  18. +--------------------------------------------------------------------------------+
  19. 1 ROW IN SET (0.00 sec)
  20.  
  21. Query OK, 0 ROWS affected (0.00 sec)
  22.  
  23. mysql> CALL proceso(2);
  24. +--------------------------------------------------------------------------------+
  25. | concat(@nombre, locales.nombre, @direccion, locales.direccion, @tipo, tipo.id) |
  26. +--------------------------------------------------------------------------------+
  27. | El LOCAL de nombre : MacDonalds Ubicado en : Calle nadie #33 Es del tipo : 2   |
  28. +--------------------------------------------------------------------------------+
  29. 1 ROW IN SET (0.00 sec)
  30.  
  31. Query OK, 0 ROWS affected (0.00 sec)
  32.  
  33.  

Con variables temporales en una consulta SQL (Validas solo por sección de usuario):

Código
  1.  
  2. mysql> SET @nombre := 'El local de nombre : '; SET @tipo := ' Es del tipo : '; SET @direccion := ' Ubicado en : ';
  3. Query OK, 0 ROWS affected (0.00 sec)
  4.  
  5. Query OK, 0 ROWS affected (0.00 sec)
  6.  
  7. Query OK, 0 ROWS affected (0.00 sec)
  8.  
  9. mysql> SELECT concat(@nombre, locales.nombre, @direccion, locales.direccion, @tipo, tipo.id) FROM locales INNER JOIN tipo WHERE locales.tipo = 1 AND tipo.id = locales.tipo;
  10. +--------------------------------------------------------------------------------+
  11. | concat(@nombre, locales.nombre, @direccion, locales.direccion, @tipo, tipo.id) |
  12. +--------------------------------------------------------------------------------+
  13. | El LOCAL de nombre : BurgerKing Ubicado en : Calle nadie #45 Es del tipo : 1   |
  14. +--------------------------------------------------------------------------------+
  15. 1 ROW IN SET (0.00 sec)
  16.  
  17. mysql> SELECT concat(@nombre, locales.nombre, @direccion, locales.direccion, @tipo, tipo.id) FROM locales INNER JOIN tipo WHERE locales.tipo = 2 AND tipo.id = locales.tipo;
  18. +--------------------------------------------------------------------------------+
  19. | concat(@nombre, locales.nombre, @direccion, locales.direccion, @tipo, tipo.id) |
  20. +--------------------------------------------------------------------------------+
  21. | El LOCAL de nombre : MacDonalds Ubicado en : Calle nadie #33 Es del tipo : 2   |
  22. +--------------------------------------------------------------------------------+
  23. 1 ROW IN SET (0.00 sec)
  24.  


En línea

Skeletron


Desconectado Desconectado

Mensajes: 1.731


A long way to go


Ver Perfil WWW
Re: Dudas de consulta SQL
« Respuesta #2 en: 7 Diciembre 2009, 00:22 am »

No.. yo en PHP no estoy haciendo nada.. Es mas..
Mira esta linea:
echo "El local de nombre: " . $row[] . ", es del tipo: " . $row[] . "y esta en: " . $row[] . "<br>";
Crees que esa linea sería capaz de imprimir algo por pantalla?

NO HICE ABSOLUTAMENTE NADA...

No creo que sea necesario armar semejante complejidad...
Mira.. como voy a mostrar el dato:
"Es un local de COMIDA RAPIDA", si lo que dice en la tabla es: "1"
O sea.. como REEMPLAZO el valor 1, por el valor de TEXTO que le corresponde que esta en la otra tabla... todo eso, en 1 sola consulta..

Porque podria hacer una consulta para traer los locales de direccion: Xxxxxx y luego hago otra consulta para ver como es el "tipo de local" que tiene el ID igual al numero de tipo de local de la tabla LOCALES...

Tendria que traer primero los locales, y luego los tipos.. o sea.. 2 consultas... y no quiero hacer eso..
Como puedo hacer todo en 1 sola consulta? en 1 solo mysql_query
En línea

^Tifa^


Desconectado Desconectado

Mensajes: 2.804


Ver Perfil
Re: Dudas de consulta SQL
« Respuesta #3 en: 7 Diciembre 2009, 01:21 am »

Yo pensaba que esta linea:

Citar
echo "El local de nombre: " . $row[] . ", es del tipo: " . $row[] . "y esta en: " . $row[] . "<br>";

A proposito le habias quitado los indices (por ejemplo $row[1], $row[2], etc) de las variables cuando posteaste tu duda aca por rapidez o porque era un ejemplo o algo asi   :-\  pero veo que no...... veo que realmente tu codigo es asi  :-\  por eso supuse que querias saber como imprimir dentro del motor los registros concatenados con las frases... disculpame si malinterprete mal.

Sobre tu codigo PHP creo que lo que andas buscando es

mysql_fetch_assoc

Donde $row["campo"] es el nombre real del campo dentro de la tabla en cuestion.

Código
  1.  
  2. while ($row = mysql_fetch_assoc($res)) {
  3.    echo "El local de nombre: "  .  $row["nombre"] . es del tipo: " . $row["tipo"] . "y esta en: " . $row["direccion"] . "<br>";
  4.  
En línea

Skeletron


Desconectado Desconectado

Mensajes: 1.731


A long way to go


Ver Perfil WWW
Re: Dudas de consulta SQL
« Respuesta #4 en: 7 Diciembre 2009, 02:57 am »

Y el mysql_query?
Basicamente, yo no se como hacer ésta consulta.


"SELECT todo de LOCALES y todo de TIPOS FROM TIPOS y LOCALES WHERE calle sea igual a: xxxxx"
Mostrar Datos de los locales que devolvió la consulta, pero con su "tipo de local" correspondiente..


Si me entendes, bien, sino, decime y te hago una super explicacion de unas 95 paginas de los 2 lados, así me entendes :)
« Última modificación: 7 Diciembre 2009, 03:00 am por Skeletron » En línea

Novlucker
Ninja y
Colaborador
***
Desconectado Desconectado

Mensajes: 10.683

Yo que tu lo pienso dos veces


Ver Perfil
Re: Dudas de consulta SQL
« Respuesta #5 en: 7 Diciembre 2009, 03:52 am »

Código
  1. SELECT locales.*,tipos.tipo
  2. FROM locales INNER JOIN tipos
  3. ON locales.tipo=tipos.tipo
  4. WHERE direccion='Pepe'

Saludos
En línea

Contribuye con la limpieza del foro, reporta los "casos perdidos" a un MOD XD
"Hay dos cosas infinitas: el Universo y la estupidez  humana. Y de la primera no estoy muy seguro."
Albert Einstein
Skeletron


Desconectado Desconectado

Mensajes: 1.731


A long way to go


Ver Perfil WWW
Re: Dudas de consulta SQL
« Respuesta #6 en: 7 Diciembre 2009, 03:55 am »

Código
  1. SELECT locales.*,tipos.tipo
  2. FROM locales INNER JOIN tipos
  3. ON locales.tipo=tipos.tipo
  4. WHERE direccion='Pepe'

Saludos

Seguramente debe ser eso lo que pido.. Pero acordate que en la tabla "TIPOS" tengo un ID y un TIPO... en ID tengo el numero, que identifica al tipo, y en la tabla LOCALES, en TIPO, tengo al NUMERO que es igual al ID de la tabla TIPOS..

Será así?:
Código
  1. SELECT locales.*,tipos.*
  2. FROM locales INNER JOIN tipos
  3. ON locales.tipo=tipos.id
  4. WHERE direccion='Pepe'
En línea

Novlucker
Ninja y
Colaborador
***
Desconectado Desconectado

Mensajes: 10.683

Yo que tu lo pienso dos veces


Ver Perfil
Re: Dudas de consulta SQL
« Respuesta #7 en: 7 Diciembre 2009, 03:59 am »

Ups :-X, si, en realidad sería así como dices, el = es contra tipos.ID :P

Por otra parte, en la primera línea puse tipos.tipo porque sino te va a salir dos veces el ID, una por la primera tabla (tipo) y una por la segunda (ID)

Saludos
En línea

Contribuye con la limpieza del foro, reporta los "casos perdidos" a un MOD XD
"Hay dos cosas infinitas: el Universo y la estupidez  humana. Y de la primera no estoy muy seguro."
Albert Einstein
Skeletron


Desconectado Desconectado

Mensajes: 1.731


A long way to go


Ver Perfil WWW
Re: Dudas de consulta SQL
« Respuesta #8 en: 7 Diciembre 2009, 04:01 am »

FUNCIONA!!!

Hice ésto:

$res = mysql_query("SELECT l.*, t.* FROM locales l INNER JOIN tipos t ON l.tipo=t.id WHERE l.calle='Independencia'");
         while($row = mysql_fetch_array($res)){
            echo "Tipo: " . $row['calle'] . ", Nombre: " . $row['nombre'] . "<br>";
         }


Ahora bien.. si quiero mostrar el ID.. sabiendo que tengo un ID en Locales, y otro ID en Tipos, como hago para hacerle un "ECHO" a ese ID???

 $row['t.id'] <<< no funciona
En línea

l337*


Desconectado Desconectado

Mensajes: 1.016


I've been thinking...


Ver Perfil
Re: Dudas de consulta SQL
« Respuesta #9 en: 7 Diciembre 2009, 04:14 am »

como tienes dos 'id' lo mas conveniente seria imprimir los array keys y de ahi agarrar el q ocupas para el id que quieres.

Código
  1.  
  2. $res = mysql_query("SELECT l.*, t.* FROM locales l INNER JOIN tipos t ON l.tipo=t.id WHERE l.calle='Independencia'");
  3.         while($row = mysql_fetch_array($res)){
  4.           print_r($row) ;
  5.           echo "<br/>--<br/>" ;
  6.  
  7.      }
  8.  

tambien puedes sustituir el nombre por el indice, ej:
$row['id'] / $row['nombre'] / $row['bla']  ===  $row[0] / $row[1] / $row[2]
En línea

Páginas: [1] 2 3 Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Consulta sobre dudas
Programación C/C++
Luchoz95 6 2,713 Último mensaje 15 Marzo 2013, 01:43 am
por 85
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines