Dudas de consulta SQL

(1/5) > >>

Skeletron:
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

^Tifa^:
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
mysql> SELECT * FROM tipo;
+----+--------------------+
| id | tipo               |
+----+--------------------+
|  1 | Comida Rapida      |
|  2 | Comida semi-rapida |
|  3 | Comida instantanea |
+----+--------------------+
3 ROWS IN SET (0.00 sec)
 
mysql> SELECT * FROM locales;
+------------+------+-----------------+
| nombre     | tipo | direccion       |
+------------+------+-----------------+
| BurgerKing |    1 | Calle nadie #45 |
| MacDonalds |    2 | Calle nadie #33 |
| KFC        |    3 | Calle nadie #24 |
+------------+------+-----------------+
3 ROWS IN SET (0.00 sec)
 
 

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

Código
mysql> delimiter /
mysql> CREATE PROCEDURE proceso(IN numero INTEGER)
   -> BEGIN                                      
   -> SET @nombre := 'El local de nombre : ';
   -> SET @tipo := ' Es del tipo : ';
   -> SET @direccion := ' Ubicado en : ';
   -> 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;                                                          
   -> END;
   -> /
Query OK, 0 ROWS affected (0.00 sec)
 
mysql> delimiter ;
mysql> CALL proceso(1);
+--------------------------------------------------------------------------------+
| concat(@nombre, locales.nombre, @direccion, locales.direccion, @tipo, tipo.id) |
+--------------------------------------------------------------------------------+
| El LOCAL de nombre : BurgerKing Ubicado en : Calle nadie #45 Es del tipo : 1   |
+--------------------------------------------------------------------------------+
1 ROW IN SET (0.00 sec)
 
Query OK, 0 ROWS affected (0.00 sec)
 
mysql> CALL proceso(2);
+--------------------------------------------------------------------------------+
| concat(@nombre, locales.nombre, @direccion, locales.direccion, @tipo, tipo.id) |
+--------------------------------------------------------------------------------+
| El LOCAL de nombre : MacDonalds Ubicado en : Calle nadie #33 Es del tipo : 2   |
+--------------------------------------------------------------------------------+
1 ROW IN SET (0.00 sec)
 
Query OK, 0 ROWS affected (0.00 sec)
 
 

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

Código
 
mysql> SET @nombre := 'El local de nombre : '; SET @tipo := ' Es del tipo : '; SET @direccion := ' Ubicado en : ';
Query OK, 0 ROWS affected (0.00 sec)
 
Query OK, 0 ROWS affected (0.00 sec)
 
Query OK, 0 ROWS affected (0.00 sec)
 
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;
+--------------------------------------------------------------------------------+
| concat(@nombre, locales.nombre, @direccion, locales.direccion, @tipo, tipo.id) |
+--------------------------------------------------------------------------------+
| El LOCAL de nombre : BurgerKing Ubicado en : Calle nadie #45 Es del tipo : 1   |
+--------------------------------------------------------------------------------+
1 ROW IN SET (0.00 sec)
 
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;
+--------------------------------------------------------------------------------+
| concat(@nombre, locales.nombre, @direccion, locales.direccion, @tipo, tipo.id) |
+--------------------------------------------------------------------------------+
| El LOCAL de nombre : MacDonalds Ubicado en : Calle nadie #33 Es del tipo : 2   |
+--------------------------------------------------------------------------------+
1 ROW IN SET (0.00 sec)
 

Skeletron:
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

^Tifa^:
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
 
while ($row = mysql_fetch_assoc($res)) {
   echo "El local de nombre: "  .  $row["nombre"] . es del tipo: " . $row["tipo"] . "y esta en: " . $row["direccion"] . "<br>";
 

Skeletron:
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 :)

Navegación

[0] Índice de Mensajes

[#] Página Siguiente