Ayuda con Consulta.

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

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

seba123neo

lo que necesitas es usar lo que se llama LEFT OUTER JOIN, busca en internet para mas informacion de lo que hace, pero es simple o sea te hace la relacion y te deja en null los que no tienen relacion, ya que con un INNER JOIN comun no te los devolveria...y el SELECT principal entonces se deberia hacer a la tabla de Materias.

me cree en MySQL 3 tablas, tratando de imitar las tuyas...no le puse todos los campos que vos tenes, solo los principales...despues vos lo adaptas...hice lo siguiente:

TABLA MATERIAS

Citarcodigomateria              nombre

1                              Matematicas
2                              Fisica
3                              Quimica
4                              Literatura
5                              Geografia
6                              Etica
7                              Filosofia
8                              Computacion





TABLA ALUMNOS

Citarmatricula    nombre

111   Sebastian
222   Tifa
333   Skeletron




TABLA KARDEX

Citarmatricula       codigomateria        calificacion

111                         1                   70   
111                         2                   80   
111                         3                   50   
222                         1                   70   
333                         2                   80   


en este caso solo vamos a filtrar los datos del alumno "Sebastian" de matricula "111"...fijate que solo tiene 3 materias calificadas...de 8 que son en total, el SELECT seria asi:

Código (sql) [Seleccionar]
SELECT a.nombre AS nombreAlumno,m.nombre AS nombreMateria,IFNULL(k.calificacion,'NO CALIFICADO') AS calificacion
FROM materias m
LEFT OUTER JOIN kardex k ON m.codigomateria=k.codigomateria
LEFT OUTER JOIN alumnos a ON k.matricula=a.matricula
WHERE k.matricula='111' OR k.matricula IS NULL


y nos retorna:

Citar
Sebastian   Matematicas                             70
Sebastian   Fisica                                       80
Sebastian   Quimica                                   50
NULL           Literatura                                NO CALIFICADO
NULL           Geografia                                NO CALIFICADO
NULL           Etica                                       NO CALIFICADO
NULL           Filosofia                                  NO CALIFICADO
NULL           Computacion                           NO CALIFICADO

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

royerphpmysql

muchas gracias por tu ayuda SEBA

voy a revisar este dato  FROM materias m porque ya me perdi voy a leer un poco de alias.

saludos

royerphpmysql

#52
Código (php) [Seleccionar]

consulta SQL:  

SELECT a.nombres AS nombreAlumno, m.materia AS nombreMateria, IFNULL( k.calif1A, 'NO CALIFICADO' ) AS calif1A
FROM materias m
LEFT OUTER JOIN kardex k ON m.codigomateria = k.codigomateria
LEFT OUTER JOIN alumnos a ON k.matricula = a.matricula
WHERE k.matricula = '91901014430'
OR k.matricula IS NULL
LIMIT 0 , 30

MySQL ha dicho:  

#1267 - #1267 - Illegal mix of collations (latin1_swedish_ci,IMPLICIT) and (latin1_spanish_ci,IMPLICIT) for operation '='




Hola Alguien me podria ayudar a descifrar este error.
me marca enmedio de estos 2

LEFT OUTER JOIN kardex k ON m.codigomateria = k.codigomateria
LEFT OUTER JOIN alumnos a ON k.matricula = a.matricula


saludos

Skeletron

(latin1_swedish_ci,IMPLICIT) and (latin1_spanish_ci,IMPLICIT)

Fijate que seguramente estas haciendo una comparacion entre "swendish" y "spanish"..

Cambia el COTEJAMIENTO de tu columna.. de la que da error..

^Tifa^

#54
Realmente, la consulta es correcta. Pero, el motor de MySQL ve un problema al querer comparar dos valores (=)  codificados con diferente juego de caracteres.

Para darle solucion a tu problema ya que te seguiras topando con el mismo sino lo cortas de raiz... Hay que indicarle a PHP que realize las consultas siempre con un solo juego de caracteres.

Haz lo siguiente chico...

En tu codigo PHP en la parte donde vayas a trabajar con MySQL edita y haz lo siguiente:

Citar

<?php

@mysql_query("SET collation_connection = latin1_spanish_ci;");

$result=mysql_query("bla bla bla



O de paso reiniciar el servidor con ese collation asignado pero nahhh , haz lo anterior dentro de tu PHP  :P

seba123neo

si, SQL Server hace lo mismo cuando queres hacer una relacion con 2 tablas de colaciones distintas, ya me ha pasado, se la cambias y listo el pollo...

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

royerphpmysql

Código (php) [Seleccionar]

@mysql_query("SET collation_connection = latin1_spanish_ci;");

$res=mysql_query("SELECT a.nombres AS nombreAlumno, m.materia AS nombreMateria, IFNULL( k.calif1A, 'NO CALIFICADO' ) AS calif1A
FROM materias m
LEFT OUTER JOIN kardex k ON m.codigomateria = k.codigomateria
LEFT OUTER JOIN alumnos a ON k.matricula = a.matricula WHERE k.matricula = ".$_POST['matricula']);


$row=mysql_fetch_array($res);


Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource

saben a que se debera? ya investigue pero no lo puedo quitar ;)  saludos

seba123neo

creo que la matricula es string no ? tendria que ir entre comillas simples no ?? o ahi ya esta con comillas ?? pregunto porque de MySQL en web no conozco...
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

royerphpmysql

excelente amigos ya quedo listo gracias por sus consejos .. peo no me da el resultado esperado puesto a que no me da el listado de materias y no me dice no esta calificado quiza este aplicando mal el codigo php. saludos ;(

royerphpmysql

gracias a todos por su ayudaya logre mi objetivo..

dios los bendiga a todos