Ayuda con Consulta.

Iniciado por royerphpmysql, 19 Marzo 2010, 22:16 PM

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

Skeletron

Cita de: ^TiFa^ en 20 Marzo 2010, 00:49 AM
CitarPodria solucionarce con un RIGHT JOIN...

Quisiera  ;)  pero el RIGHT JOIN y el LEFT JOIN lo que retorna es la otra data de la otra tabla donde sobran campos o existen mas campos que la tabla consultada primera.  :xD  no se entiende lo se...

Un ejemplo rapido, tengo dos tablas:

Tabla1
nombres

Tabla2
apellidos

Suponte que Tabla1 tiene 20 registros , digase 20 nombres, y tabla2 tiene 15 apellidos...  :P  y tu quieres ver todos los registros de la tabla1 pero haces un join con tabla2 que tiene menos  :(  entonces haces un RIGHT o LEFT join a la tabla1  depende su ubicacion si primera o segunda  :xD  y ahi retorna lo que buscas... pero en el caso del amigo en cuestion, creo que ya los registros estan totalmente filtrados como caen...

Si hace un:
alumnos rigth join materias
Se mostrarán todas las entradas en MATERIAS, con su respectivo alumno. Luego con un GROUP BY matricula, se soluciona todo..


Tio, prueba ésto:
SELECT alumnos.nombres, kardex.matricula, kardex.codigomateria, kardex.calif1A FROM alumnos NATURAL RIGHT JOIN GROUP BY matricula;

Skeletron

Código (sql) [Seleccionar]

mysql> SELECT alumnos.nombre, alumnos.apellido, materias.matricula, materias.calificacion FROM alumnos NATURAL RIGHT JOIN materias GROUP BY matricula;
+--------+----------+-----------+--------------+
| nombre | apellido | matricula | calificacion |
+--------+----------+-----------+--------------+
| Noel   | Broda    |         1 |           10 |
| Tiffa  | Perez    |         2 |            9 |
+--------+----------+-----------+--------------+
2 rows in set (0.02 sec)



mysql> select * from materias;
+-----------+--------------+
| matricula | calificacion |
+-----------+--------------+
|         1 |           10 |
|         2 |            9 |
|         2 |            8 |
|         1 |            6 |
+-----------+--------------+
4 rows in set (0.00 sec)





El problema de ahí esta en que no muestra todas las entradas MATRICULA...
Entonces no tendría que hacer el GROUP BY...


Tu tio, lo que quieres ahcer, es mostrar todas las matriculas de la tabla extraña, y con el nombre y apellido del responzable de esa calificacion?

royerphpmysql

mmm entonces tendria que modificar la estructura de las tablas.

en la tabla kardex se van alimentando las materias con sus calificaciones.

la tabla kardex esta ligada por medio de la matricula con la de alumnos.

cuando doy de alta una calificacion esta se almacena en tabla kardex con numero de matricula, codigo materia y su respectiva calificacion.

donde consulto quiero mostrar solo una vez la matricula pero sus diferentes calificaciones en sus respectivas codigomateria.

espero explicarme

saludos

seba123neo

pienso lo mismo que te dijo ^TiFa^ , no podes hacer que te traiga 1 sola vez la matricula y a la vez todas las calificaciones que tenga...es un contradiccion...es como estar omitiendo campos de una columna y no de otras...y un group by no serviria porque si son de diferentes ¿ fechas y materias ? vos lo deberias mostrar igual.

¿¿ que problema hay con que te muestre la matricula siempre ??  yo no le veo problema...capas estas haciendo mal el planteo de donde queres mostrar eso...por eso pregunto..donde vas a mostrar esos datos..en que estas programando ??

saludos.
La característica extraordinaria de las leyes de la física es que se aplican en todos lados, sea que tú elijas o no creer en ellas. Lo bueno de las ciencias es que siempre tienen la verdad, quieras creerla o no.

Neil deGrasse Tyson

^Tifa^

Por eso te decia desde un inicio Skeletron  ;) no se podia de la manera que el lo desea  ;) no lo tomes como un reclamo  :rolleyes:

Porque mejor Skeletron, no le haces una especie de script en PHP donde, capte todos los resultados de una consulta con GROUP BY y pos... divida las cadenas y solo muestre la primera cadena de registros completas, y el resto pues solo muestre el 3 registro por ejemplo????

Mediante scripts lo que el pide se puede organizar, mediante procedimientos almacenados podria ser igual.. pero con 1 sola consulta SQL aun no lo considero posible  :rolleyes:

royerphpmysql

 :-( sip creo que MYSQL esta bien la consulta

SELECT alumnos.nombres, kardex.matricula, kardex.codigomateria, kardex.calif1A FROM alumnos, kardex WHERE alumnos.matricula = kardex.matricula GROUP BY codigomateria

donde el resultado es este.

+------------------+-------------+---------------+---------+
| nombres          | matricula   | codigomateria | calif1A |
+------------------+-------------+---------------+---------+
| ALMANZA MAURICIO | 91901014429 | M10           |      80 |
| ALMANZA MAURICIO | 91901014429 | M11           |      90 |
| ALMANZA MAURICIO | 91901014429 | M12           |      69 |
| ALMANZA MAURICIO | 91901014429 | M13           |      78 |
+------------------+-------------+---------------+---------+

como lo digo nuestra amiga TIFA no se puede violar la orden del resultado solo hay que realizar un buen SCRIPT en PHP para qeu me omita las ultimas 3 lineas  de nombres y matriculas y solo muestre todas las materias y calificaciones.

THANKS... si estuvieran aqui les invitara unas cheves a todos jaja

Skeletron

No es tan dificil...

Código (php) [Seleccionar]
$res=mysql_query("
SELECT alumnos.nombre, alumnos.apellido, alumnos.matricula,
kardex.calificacion, kardex.codigomateria
FROM alumnos, kardex
WHERE kardex.matricula=alumnos.matricula");

$row=mysql_fetch_array($res) //hago esto, para poder tomar el nombre antes de entrar al WHILE.

echo 'El alumno '.$row['apellido'].' '.$row['nombre'].' de matricula: '.$row[matricula].' obtuvo las siguiente calificaciones:</br>';

echo 'Codigo de Materia: '.$row['codigomateria'].' | Calificacion: '.$row['calificacion'].'</br>';

while($row=mysql_fetch_array($res)){

   echo 'Codigo de Materia: '.$row['codigomateria'].' | Calificacion: '.$row['calificacion'].'</br>';

}



Dime si te funcionó.. Que lo hice aca sin ningun IDE

Skeletron

Si no entiendes el codigo, me dices y te lo explico paso por paso

royerphpmysql

mmm suena que si va funcionar pero por lo pronto me mando error de sintaxis con el echo.. dejame ver.. quiza le falte algo. lo copie tal cual lo pusiste..

royerphpmysql

<?PHP

   // Conectar con el servidor de base de datos
      $conexion = mysql_connect ("localhost", "root", "root")
         or die ("No se puede conectar con el servidor");

   // Seleccionar base de datos
      mysql_select_db ("escuela")
         or die ("No se puede seleccionar la base de datos");

$res=mysql_query("SELECT alumnos.nombres, alumnos.apellidos, alumnos.matricula, kardex.calif1A, kardex.codigomateria FROM alumnos, kardex WHERE kardex.matricula=alumnos.matricula");

$row=mysql_fetch_array($res) //hago esto, para poder tomar el nombre antes de entrar al WHILE.

echo 'El alumno '.$row['apellidos'].' '.$row['nombres'].' de matricula: '.$row[matricula].' obtuvo las siguiente calificaciones:</br>';

while($row=mysql_fetch_array($res)){    echo 'Codigo de Materia: '.$row['codigomateria'].' | Calificacion: '.$row['calif1A'].'</br>';
       }
echo "<ul> </ul>";
echo "<td><div align=left><a href=entra.php>Retornar al Menú Principal</a></div></td>";
      }
      else
         print ("No hay noticias disponibles");

// Cerrar conexión
   mysql_close ($conexion);
?>


me marca esto.
Parse error: syntax error, unexpected T_ECHO in C:\AppServ\www\alumnos\consultasola.php on line 30