¿Cómo hacer una consulta doble a una tabla?

Iniciado por 1mpuls0, 8 Junio 2012, 00:14 AM

0 Miembros y 1 Visitante están viendo este tema.

1mpuls0

Hola.
Necesito hacer una consulta para obtener dos valores de una misma tabla, pero  necesito que me los muestre en dos columnas.
Tengo la siguiente tabla (localidades).

+------+------------------+
| id   | nombre |
+------+------------------+
|    1 | Oviedo           |
|    2 | Girona           |
|    3 | Barcelona        |
+------+------------------+
(La verdad es que no he podido acomodar la tabla, alguien me puede apoyar con esto?).

Necesito que el resultado de la consulta muestre el nombre de la localidad en columnas.

+-----------+-------------------+
| localidad1  | localidad2             |
+-----------+-------------------+
|    Oviedo   | Girona                  |
+-----------+-------------------+

lo usual sería hacer la consulta "SELECT nombre_localidad FROM localidades WHERE id=1 OR id=2;", pero el resultado obviamente sería el siguiente:

+---------+
| nombre  |
+---------+
| Oviedo  |
| Girona    |
+--------+

Hay alguna manera de hacer lo que necesito?.

Gracias
abc

:ohk<any>

Como quieres mostrar el resultado de la consulta.

Me imagino que con algun lenguaje como Php u otro no es cierto?

O quieres que la consulta se liste de ese modo en particular desde el SMBD que estes usando.
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.

:ohk<any>

En caso de usar php, seria mas o menos asi:

Tu problema no radica en la consulta sql, mas bien en la forma en la que ordenas tu tabla al momento de mostrar los resultados.

Me imagino que con esto podrias arreglarlo:

Código (html4strict) [Seleccionar]
<table>
  <tr>
     <td> localidad1 </td>
     <td> localidad2 </td>
  </tr>
  <tr>
     <td> Oviedo (Aqui viene el codigo php que imprime el resultado de la consulta)  </td>
     <td> Girona (Aqui viene el codigo php que imprime el resultado de la consulta)  </td>
  </tr>
</table>


Que saldria asi:

+-----------+-------------------+
| localidad1  | localidad2     |
+-----------+-------------------+
|    Oviedo   | Girona           |
+-----------+-------------------+

Nose si es a esto que te refieres, pero espero que sea de ayuda.

Saludos
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.

1mpuls0

Gracias ohk
Es precisamente lo que no quiero hacer (que por ahora tengo así), ya que siento que son muchas líneas de código para algo tan sencillo.

$setence1="Select *...";
$query1=mysql_query(...);
$array1=mysql_fetch_array(...);
$result1=$array1[];

$setence2="Select *...";
$query2=mysql_query(...);
$array2=mysql_fetch_array(...);
$result2=$array2[];

Pensé que existiría una forma de hacerlo en SMBD, pero si no existe (que quiero suponer que si la hay).

Saludos.
abc

Toxico

Cita de: Darhius en  8 Junio 2012, 05:47 AM
Gracias ohk
Es precisamente lo que no quiero hacer (que por ahora tengo así), ya que siento que son muchas líneas de código para algo tan sencillo.

$setence1="Select *...";
$query1=mysql_query(...);
$array1=mysql_fetch_array(...);
$result1=$array1[];

$setence2="Select *...";
$query2=mysql_query(...);
$array2=mysql_fetch_array(...);
$result2=$array2[];

Pensé que existiría una forma de hacerlo en SMBD, pero si no existe (que quiero suponer que si la hay).

Saludos.

Hola, lo que tu quieres hacer es "pivot" de tablas, sql server y oracle tienen buen soporte para ello en mysql, la solución vendria hacer algo asi.

select
(select nombre from localidades where id = 1) as localidad1,
(select nombre from localidades where id = 2) as localidad2
from localidades
limit 1


No es lo optimo pero se acerca algo.

solo el principio....


1mpuls0

Gracias Toxico
La consulta me funciona.

Saludos.
abc