Autor Tema: MySQL - Usar varias tablas y usar AS  (Leído 1422 veces)

Desconectado westwest

  • PHPero Master
  • ******
  • Mensajes: 2.837
  • Karma: 104
  • Sexo: Masculino
    • Ver Perfil
MySQL - Usar varias tablas y usar AS
« en: 26 de Diciembre de 2009, 19:29:05 pm »
Me aburro, asi que se me ocurrió explicar un poco por encima esto...

Antes de empezar, teneis que saber que no hay por que seleccionar todos los datos de la tbla (usando *), se pueden coger datos especificos (SELECT nombre, contrasena FROM usuarios)...

AS se usa para asignar un nombre a algo extraido de mysql, de esta manera, podremos obtenerlo con mysql_fetch_array, por ejemplo, quiero obtener el valor absoluto de un numero guardado en MySQL (el valor absluto se calcula mediante la funcion abs de MySQL)

Ejemplo:

$query 
mysql_query("SELECT num, abs(num) AS nabsoluto FROM numeros");
while(
$fetch mysql_fetch_array($query)) {
echo &
#39;Numero: &#39;.$fetch[&#39;num&#39;].&#39; absoluto: &#39;.$fetch[&#39;nabsoluto&#39;].&#39; <br>&#39;;
}

Aquí, he seleccionado la columna num y el absoluto de num de la tabla numeros.
Al absoluto le he asignado el nombre "nabsoluto".

Es facil, ¿No?

Pero no se usa solo con datos, si no con las propias tablas si queremos (FROM mitabla AS latabla), más por comodidad que usabilidad.


Para seleccionar datos de varias tablas debemos indicar varias en el FROM:
FROM tabla1, tabla2

Podemos asignarles un nombre:
tabla1 AS t1, tabla2 AS t2

Y para coger datos, usamos el nombre seguido de un punto y el campo, asi:
SELECT t1.nombre, t2.nombre FROM tabla1 AS t1, tabla2 AS t2 WHERE t1.id = '2' OR t2.id = '2' ORDER BY t1.id

Como veis, tambien es así en el WHERE y ORDER BY.

Un ejemplo practico. Queremos seleccionar los mensajes de usuarios con rango 1, normalmente lo ariamos asi:


$mensajes 
mysql_query("SELECT * FROM `mensajes`");
while(
$mensaje mysql_fetch_array($mensajes)) {
$usuario mysql_query("SELECT rango FROM `usuarios` WHERE id = &#39;".$mensaje[&#39;autor&#39;]."&#39;");
$fetch mysql_fetch_array($usuario);
if(
$fetch[&#39;rango&#39;] == 1) {
echo $mensaje[&#39;contenido&#39;];
}
}

Hacer esto nos ha llevado 2 querys y un if, ademas de ser molesto, son monton de querys, porque por cada mensaje, se hace una query para el usuario, (con 100 mensajes hariamos 100 querys!)

Es mucho mas simple hacer esto:

$mensajes 
mysql_query("SELECT m.* FROM mensajes AS m, usuarios AS u WHERE u.id = m.autor AND u.rango = &#39;1&#39;");
while(
$mensaje mysql_fetch_array($mensajes)) {
echo 
$mensaje[&#39;contenido&#39;];
}


Aquí, usamos una sola query (para 1 mensaje o para 100).
En ella seleccionamos todo (con el comodin *) de la tabla mensajes.
En el WHERE, he indicado que el id del usuario tiene que ser el guardado en la tabla mensajes (para ese mensaje) y el rango de ese usar debe ser 1.
Por supuesto, para mostrar datos del user podemos poner SELECT m.*, u.nombre, u.avatar,...


Espero que esto os sirva, es bastante sencillito ;)
« Última modificación: 28 de Diciembre de 2009, 19:23:44 pm por westwest »

Comunidad PHPeros

MySQL - Usar varias tablas y usar AS
« en: 26 de Diciembre de 2009, 19:29:05 pm »

Desconectado x.mara.x

  • PHPero Master
  • ******
  • Mensajes: 1.364
  • Karma: 57
  • Sexo: Femenino
    • Ver Perfil
Re:MySQL - Usar varias tablas y usar AS
« Respuesta #1 en: 26 de Diciembre de 2009, 22:49:19 pm »
buenisimo +karma! creo que lo implementare en todos los sistemas que haga (si es que logro hacerlo sin errores XD) una sola duda
por que?
"SELECT m.* ...
?

Desconectado westwest

  • PHPero Master
  • ******
  • Mensajes: 2.837
  • Karma: 104
  • Sexo: Masculino
    • Ver Perfil
Re:MySQL - Usar varias tablas y usar AS
« Respuesta #2 en: 26 de Diciembre de 2009, 23:46:49 pm »
para seleccionar todo de la tabla mensajes (m)

Desconectado x.mara.x

  • PHPero Master
  • ******
  • Mensajes: 1.364
  • Karma: 57
  • Sexo: Femenino
    • Ver Perfil
Re:MySQL - Usar varias tablas y usar AS
« Respuesta #3 en: 28 de Diciembre de 2009, 14:41:41 pm »
ya pero la tabla no se llama mensajes? o igual coje el AS que viene despues?

Desconectado westwest

  • PHPero Master
  • ******
  • Mensajes: 2.837
  • Karma: 104
  • Sexo: Masculino
    • Ver Perfil
Re:MySQL - Usar varias tablas y usar AS
« Respuesta #4 en: 28 de Diciembre de 2009, 16:07:38 pm »
Coge el as ... no esta de decoracion...

Desconectado x.mara.x

  • PHPero Master
  • ******
  • Mensajes: 1.364
  • Karma: 57
  • Sexo: Femenino
    • Ver Perfil
Re:MySQL - Usar varias tablas y usar AS
« Respuesta #5 en: 28 de Diciembre de 2009, 18:26:53 pm »
mm bueno, ya entendi el codigo xD

Desconectado Focux

  • PHPero Master
  • ******
  • Mensajes: 1.010
  • Karma: 22
    • Ver Perfil
Re:MySQL - Usar varias tablas y usar AS
« Respuesta #6 en: 28 de Diciembre de 2009, 18:40:48 pm »
En vez de s seria u no s, pero en si el tutorial esta bien.
Citar
$mensajes = mysql_query("SELECT m.* FROM mensajes AS m, usuarios AS s WHERE u.id = m.autor AND u.rango = '1'");
while($mensaje = mysql_fetch_array($mensajes)) {
echo $mensaje['contenido'];
}
Mixtiqueros.net

<?PHP
define
(_miNombre, &#39;Focux&#39;);
if(_miNombre == &#39;Focux&#39;): printf(&#39;%s es un programador avanzado&#39;, _miNombre); else: printf(&#39;Tu no eres %s&#39;, _miNombre); endif;
?>

Desconectado westwest

  • PHPero Master
  • ******
  • Mensajes: 2.837
  • Karma: 104
  • Sexo: Masculino
    • Ver Perfil
Re:MySQL - Usar varias tablas y usar AS
« Respuesta #7 en: 28 de Diciembre de 2009, 19:22:16 pm »
si, me ekivoke, pero puede ser u, s,  h o pe*****grillo ...