Ayuda con una consulta con tablas relacionadas mysql

Iniciado por mark182, 17 Noviembre 2009, 18:19 PM

0 Miembros y 3 Visitantes están viendo este tema.

sempus

entonces usa esta consulta para verlos

Código (sql) [Seleccionar]
SELECT id_alum,id_us FROM alumnos,usuarios

aca veremos si soy iguales o no
...si la tuviera detendría el tiempo para verla como lo hago en este momento y seria feliz eternamente...
Descarga openSUSE

mark182

Me crees si te digo que no me esta mostrando nada  ;D

sempus

...si la tuviera detendría el tiempo para verla como lo hago en este momento y seria feliz eternamente...
Descarga openSUSE

mark182

no, lo revise y hay un solo registro y estan todos los campos completos.-

-Ramc-

Cita de: mark182 en 17 Noviembre 2009, 20:30 PM
no, lo revise y hay un solo registro y estan todos los campos completos.-
:O Esto es raro, dame un screen y te creo. :xD

Haz un select a las tablas por separado y dejanos ver que tienen.

Shhh... be vewy, vewy, quiet!  I'm hunting wabbits...
LA PANDILLA MAS GRANDE DE MI CIUDAD, SE LLAMA POLICIA NACIONAL.

sempus

-Ramc- que incrédulo eres xD, yo si le creo, el error ha de estar en el código que usa para ejecutar la consulta, ya que según el código que el coloco no lo esta haciendo en la linea de comandos de MySQL y por lo tanto le creo que tenga almenos un registro :P

aunque quien sabe  :rolleyes:
...si la tuviera detendría el tiempo para verla como lo hago en este momento y seria feliz eternamente...
Descarga openSUSE

mark182

Si no selecciono la base de datos no va a mostrar nada no? jajajaj  sin querer borre la parte de mysql_select_db ;D. Me van a matar.

Pero bien...que creen? siguen los problemas, todas las consultas que haga me aparece "Resource id #4" nada mas. Ahora que esta pasando?

Gracias y disculpas.

-Ramc-

Cita de: mark182 en 17 Noviembre 2009, 20:42 PM
Si no selecciono la base de datos no va a mostrar nada no? jajajaj  sin querer borre la parte de mysql_select_db ;D. Me van a matar.

Pero bien...que creen? siguen los problemas, todas las consultas que haga me aparece "Resource id #4" nada mas. Ahora que esta pasando?

Gracias y disculpas.
La función te devuelve un recurso que ahora utilizaras para sacar las columnas con funciones como: array mysql_fetch_row(resource $result )
Busca sobre esta y sobre mysql_num_rows(resource $result).

Aunque esto ya es de PHP. :P

Saludos.

Shhh... be vewy, vewy, quiet!  I'm hunting wabbits...
LA PANDILLA MAS GRANDE DE MI CIUDAD, SE LLAMA POLICIA NACIONAL.

^Tifa^

#18
No se que registro tengas dentro de tu tabla, serias tan amable de postear que consultas estas utilizando? que registros tienes dentro de la tabla (Aunque sean 5 de ejemplo)... y bueno que codigo PHP (Aunque ya esa parte no corresponderia para este subforo, sino a PHP) obvia el codigo (Aunque por la respuesta que expones que siempre te retorna Resourse#4 y aunque no he visto tu tabla segun los campos que tienes este dato como que no concuerda... pareciera que es un fallo mas de codigo que de consulta) Pero sino es mucho pedir, podrias entras por el cliente MySQL (En una terminal o MS-DOS) y realizar la misma consulta SQL (que haces en tu codigo PHP) dentro del mismo motor MySQL y ver que te retorna y exponerlo aca?

Una recomendacion :) (para todos) Procura usar mas indices puesto que:

Cita de: sql

mysql> select * from usuarios;
+-------+---------+----------------------------------+
| id_us | usuario | contraseña                       |
+-------+---------+----------------------------------+
|     1 | coco    | 202cb962ac59075b964b07152d234b70 |
|     2 | shersy  | 202cb962ac59075b964b07152d234b70 |
|     3 | xoxo    | 202cb962ac59075b964b07152d234b70 |
+-------+---------+----------------------------------+
3 rows in set (0.00 sec)                               

mysql> select * from alumnos;
+---------+---------+---------+
| id_alum | nombres | colegio |
+---------+---------+---------+
|       1 | Juan    | Perez   |
|       2 | Maria   | Mendez  |
|       3 | Matias  | Lopez   |
+---------+---------+---------+
3 rows in set (0.00 sec)       


Lo anterior es un ejemplo, llaves primarias solo son id_alum y id_us por el momento, pero si solo quieres el campo 'colegio' y filtras por las 2 llaves de cada tabla mira que pasa:

Código (sql) [Seleccionar]


mysql> explain select colegio as COLEGIO from alumnos inner join usuarios where alumnos.id_alum = usuarios.id_us;
+----+-------------+----------+--------+---------------+---------+---------+--------------------------+------+-------------+
| id | select_type | table    | type   | possible_keys | key     | key_len | ref                      | rows | Extra       |
+----+-------------+----------+--------+---------------+---------+---------+--------------------------+------+-------------+
|  1 | SIMPLE      | alumnos  | ALL    | PRIMARY       | NULL    | NULL    | NULL                     |    3 |             |
|  1 | SIMPLE      | usuarios | eq_ref | PRIMARY       | PRIMARY | 1       | primaria.alumnos.id_alum |    1 | Using index |
+----+-------------+----------+--------+---------------+---------+---------+--------------------------+------+-------------+




Lo anterior muestra como la tabla alumnos para encontrar el campo 'Colegio' del usuario 'coco' tiene que rebuscar en todos los registros que contiene la tabla (Por eso no basta con hacer id = id esto buscara en todos los registros).

Sin embargo si haces:

Código (sql) [Seleccionar]


mysql> create index indice on usuarios(usuario);
Query OK, 3 rows affected (0.03 sec)
Records: 3  Duplicates: 0  Warnings: 0

mysql> explain select colegio as COLEGIO from alumnos,usuarios where usuario = 'coco' and alumnos.id_alum = ( select id_us from usuarios where usuario = 'coco');
+----+-------------+----------+-------+---------------+---------+---------+-------+------+--------------------------+
| id | select_type | table    | type  | possible_keys | key     | key_len | ref   | rows | Extra                    |
+----+-------------+----------+-------+---------------+---------+---------+-------+------+--------------------------+
|  1 | PRIMARY     | alumnos  | const | PRIMARY       | PRIMARY | 1       | const |    1 |                          |
|  1 | PRIMARY     | usuarios | ref   | indice        | indice  | 21      | const |    1 | Using where; Using index |
|  2 | SUBQUERY    | usuarios | ref   | indice        | indice  | 21      |       |    1 | Using where              |
+----+-------------+----------+-------+---------------+---------+---------+-------+------+--------------------------+
3 rows in set (0.00 sec)

mysql> explain select colegio as COLEGIO from alumnos,usuarios where usuario = 'coco' and usuarios.id_us = alumnos.id_alum;                      +----+-------------+----------+--------+----------------+---------+---------+-------------------------+------+-------------+
| id | select_type | table    | type   | possible_keys  | key     | key_len | ref                     | rows | Extra       |
+----+-------------+----------+--------+----------------+---------+---------+-------------------------+------+-------------+
|  1 | SIMPLE      | usuarios | ref    | PRIMARY,indice | indice  | 21      | const                   |    1 | Using where |
|  1 | SIMPLE      | alumnos  | eq_ref | PRIMARY        | PRIMARY | 1       | primaria.usuarios.id_us |    1 |             |
+----+-------------+----------+--------+----------------+---------+---------+-------------------------+------+-------------+
2 rows in set (0.00 sec)




En ambos casos de consultas donde hay hasta un subquery, ves como la consulta solo analiza 1 columna en vez de todas para retornarte el resultado???  ;)  ten pendiente que campos pueden ser candidatos a llave o indices en tu tabla para que le saques provecho de optimizacion a una consulta.


mark182

Gracias a todos por su ayuda antes que nada. Ya lo que me dice ^TiFa^ es muy avanzado para mi y no lo entiendo. Y segui buscando y buscando pero no puedo hacer lo que quiero.  :-\