Duda con query MySQL
3 seguidores
Tengo una duda al ordenar una query en MySQL:
Tengo 2 tablas:
+ la primera es un listado de nombres con una columna de id (numérica) y otra, nombres, que son palabras.
+ la segunda es una tabla en la que hay una columnaid_nombres que hace referencia al id de la primera tabla.
Lo que intento es que al hacer una consulta cualquiera en la segunda tabla, pueda ordenarla alfabéticamente según los valores de la columna nombres de la primera tabla.
De buenas a primera lo que haría es:
<code>SELECT * FROM tabla2 ORDER BY id_nombres ASC</code>
La cosa es que en vez que me ordene los ids, lo haga con los nombres
Mag
psycho
Olé!
Pues anda ke no perdido tiempo haciendo querys absurdas... :s
Pues yo diria que asi se aprende :D
psycho
Olé!
Pues anda ke no perdido tiempo haciendo querys absurdas... :s
Voy a ver si me pillo un buen libro. Grazzie Kr0n :)
Kr0n
Yep ;)
Lo que estás haciendo ahí es lo que se llama un JOIN en SQL, y no es más que un subconjunto del producto cartesiano de ambas tablas (rollazo wikipedia)
FROM A,B
WHERE A.id = B.id
Es decir, "unes" una fila de A con una de B, siempre que se cumpla la condición. Si no especificaras la condición, tendrías todo el producto cartesiano (es decir A x B a tutiplén, la primera fila de A con todas las de B, la segunda fila de A con todas las de B, y así sucesivamente) lo cual es un poco locura.
Entonces teniendo el JOIN puedes sacar la información que quieras de A y de B. Es la forma de unir dos tablas que estan relacionadas con una FOREIGN KEY, que es tu caso con "id_nombres".
No se si te he liado más, pero en cualquier caso te recomiendo que te pilles un libro de SQL o similar (tutorial, etc) para tener estos conceptos claros ;)
psycho
Entonces en el SELECT se podría obtener directamente el valor de nombres de la tabla1, en vez de obtener el id y luego hacer otra query para buscar el nombre.....
<code>SELECT tabla1.nombre,tabla2.activado FROM tabla2, tabla1 WHERE tabla2.id = tabla1.id_nombres AND tabla2.activado=1 ORDER BY tabla1.nombres</code>
psycho
Vale, genial Kr0n ya lo pillo, voy a probar! Gracias!
Kr0n
No, las puedes obviar si quieres. Son alias para el nombre de la tabla, para no tener que estar escribiendo todo el rato "tabla1" y "tabla2".
Esto sería equivalente, pero sin aliases:
<code>
SELECT tabla2.*
FROM tabla2, tabla1
WHERE tabla1.id = tabla2.id_nombres
ORDER_BY tabla1.nombres
</code>
psycho
Vale, entoces en este caso t1 y t2 serían variables que almacenan las tablas?
Kr0n
Si quieres ordenar por información que no está en la tabla2, sino en la tabla1, necesitas la tabla1:
<code>
SELECT t2.*
FROM tabla2 t2, tabla1 t1
WHERE t1.id = t2.id_nombres
ORDER_BY t1.nombres
</code>