Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General » Mysql »

como ago esta consulta

Estas en el tema de como ago esta consulta en el foro de Mysql en Foros del Web. miren en mi tabla jqcalendar tengo la siguiente estructura @import url("http://static.forosdelweb.com/clientscript/vbulletin_css/geshi.css"); Código MySQL: Ver original Subject          StartTime         ...
  #1 (permalink)  
Antiguo 09/12/2010, 15:55
 
Fecha de Ingreso: noviembre-2010
Mensajes: 55
Antigüedad: 14 años
Puntos: 0
como ago esta consulta

miren en mi tabla jqcalendar tengo la siguiente estructura
Código MySQL:
Ver original
  1. Subject          StartTime
  2.    
  3.       -----------      -------------------
  4.    
  5.       148100-0      2010-12-01
  6.    
  7.       298852-0      2010-12-06

bueno son mas campos que contiene mi tabla pero solo pongo los que ocupo ok son dos una que almacena la ficha del paciente la cual es subject y la otra que almacena la fecha ok el cual es starttime bien en la segunda tabla reporte tiene la siguiente estructura

Código MySQL:
Ver original
  1. ficha                      diags_clave        
  2.    
  3.       ------                     ---------------
  4.  
  5.       148100-0                A00
  6.  
  7.       298852-0                A00

bien yo lo que deceo hacer es que en la primera consulta que se haria en la tbla jqcalendar busque las fechas que introduce el usuario ok lo cual seria una fecha de inisio y una fecha fnal algo asi
Código PHP:
 select FROM jqcalendar  WHERE StartTime   BETWEEN '2010-12-01' AND '2010-12-06' 
lo segundo es que si existen esas fechas que introducio el usuario aga una consulta en la tabla reporte validando la ficha del paciente algo asi
Código PHP:
Subject de la tabla jqcalendar == a ficha de la tabla reporte 
si esto se cumple entonces cuento cuandos A00 existen en mi campo diags_clave de la tabla reporte y el resultado seria algo asi
A00=2
algiuien pordira decirme como hacerle
  #2 (permalink)  
Antiguo 09/12/2010, 15:59
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 16 años, 7 meses
Puntos: 2534
Respuesta: como ago esta consulta

a ver, en primer lugar me parece que te estas confundiendo de lenguajes...

una consulta de SQL no es para nada código PHP, ¿si entiendes la diferencia verdad?
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.
  #3 (permalink)  
Antiguo 09/12/2010, 16:01
 
Fecha de Ingreso: noviembre-2010
Mensajes: 55
Antigüedad: 14 años
Puntos: 0
Respuesta: como ago esta consulta

Cita:
Iniciado por pateketrueke Ver Mensaje
a ver, en primer lugar me parece que te estas confundiendo de lenguajes...

una consulta de SQL no es para nada código PHP, ¿si entiendes la diferencia verdad?

traquilo amigo no me regañes lo que quiero hacer es esa consulta con php asi como lo explique
  #4 (permalink)  
Antiguo 09/12/2010, 16:03
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 18 años, 5 meses
Puntos: 2135
Tema movido desde PHP a Mysql
  #5 (permalink)  
Antiguo 09/12/2010, 16:08
 
Fecha de Ingreso: noviembre-2010
Mensajes: 55
Antigüedad: 14 años
Puntos: 0
Respuesta: como ago esta consulta

nooooo por que movieron mi tema=( yo lo que quiero es generar el codigo de esas consultas en php pero no se como por eso lo puse en php
  #6 (permalink)  
Antiguo 09/12/2010, 18:08
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 17 años
Puntos: 2658
Respuesta: como ago esta consulta

El problema es que lo que sea funcionamiento de las consultas en sí es asunto de SQL, no de PHP.
Tal es así que la consulta que puede responder tu duda sería mas o menos:
Código MySQL:
Ver original
  1. SELECT T2.ficha, T2.diags_clave
  2. FROM jqcalendar  T1 INNER JOIN reporte T2 ON T1.ficha = T2.subject
  3. WHERE (T1.StartTime BETWEEN '2010-12-01' AND '2010-12-06' )
  4. ORDER BY t2.diags_clave;
Y si sólo quieres los que sean "A00", sería
Código MySQL:
Ver original
  1. SELECT T2.ficha, T2.diags_clave
  2. FROM jqcalendar  T1 INNER JOIN reporte T2 ON T1.ficha = T2.subject
  3. WHERE (T1.StartTime BETWEEN '2010-12-01' AND '2010-12-06' ) AND T2.diags_clave='A00';
Y si lo que quieres es contarlos sería:
Código MySQL:
Ver original
  1. SELECT T2.diags_clave, COUNT(*) Total
  2. FROM jqcalendar  T1 INNER JOIN reporte T2 ON T1.ficha = T2.subject
  3. WHERE (T1.StartTime BETWEEN '2010-12-01' AND '2010-12-06' )  AND T2.diags_clave='A00'
  4. GROUP BY T2.diags_clave;

Como verás, el problema es estrictamente de MySQL, no de PHP.
En cuanto a usar una sentencia de SQL en PHP, es decir, consultar a la base, te recomiendo leer las FAQ's de PHP, donde encontrarás todos los ejemplos necesarios.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #7 (permalink)  
Antiguo 09/12/2010, 18:29
 
Fecha de Ingreso: noviembre-2010
Mensajes: 55
Antigüedad: 14 años
Puntos: 0
Respuesta: como ago esta consulta

hola amigo intente aser la primera consulta que me pusiste desconosco un poquito sobre las uniones de tabla bueno mi codigo que do asi

Código PHP:

conectar
();
$jcalendar=mysql_query("
SELECT T2.ficha, T2.diags_clave
FROM jqcalendar  T1 INNER JOIN reporte T2 ON T1.ficha=T2.subject
WHERE (T1.StartTime BETWEEN '2010-12-01' AND '2010-12-06' )
ORDER BY t2.diags_clave

"
); 
desconectar();

if (
mysql_num_rows($jcalendar)>0)

{

while (
$rowj=mysql_fetch_array($jcalendar))

{
//separo la ficha que se extrae de la tabla jcalendar

echo $ficha=$rowj[1];
 

}
//cierro el while
                
}//cierro el if 
pero no me aroja nada me salta este error

Warning: mysql_num_rows() expects parameter 1 to be resource, boolean given in C:\xampp\htdocs\hospital\calando.php on line 19
  #8 (permalink)  
Antiguo 09/12/2010, 20:40
 
Fecha de Ingreso: noviembre-2010
Mensajes: 55
Antigüedad: 14 años
Puntos: 0
Respuesta: como ago esta consulta

hola amigo mira esta consulta ase lo que yo quiero
Código MySQL:
Ver original
  1. SELECT T2.diags_clave, COUNT(*)  Total
  2.       FROM jqcalendar  T1 INNER JOIN reporte T2 ON T2.ficha=T1.Subject
  3.       WHERE (T1.StartTime BETWEEN '$ini' AND '$fin')
  4.       GROUP BY T2.diags_clave
pero la ficha del paciente debe de tener el siguiente formato
148100
y esa ficha tiene su respectivo codigo en este caso es
0
entonces en la tabla jcalendar yo guardo la ficha y el codigo junto solo lo separo por un guion osea en el campo Subject se guarda esto
148100-0
y en la tabla reporte se guarda por separado osea en el campo ficha se guarda solo la ficha:
148100 y hay otro campo codigo en el cual se guarda el codigo
0
ahora mi pregunta es partiendo de la consulta que me ayudaste aser como puedo validar la ficha que esta en el campo jcalendar y con la ficha que esta en reporte tengo una didea de que se usaria un explode no es asi??? para separar la ficha y el codigo en el caso de la tabla jcalendar
  #9 (permalink)  
Antiguo 10/12/2010, 05:18
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 17 años
Puntos: 2658
Respuesta: como ago esta consulta

Por lo que parece, el problema básico es que tienes poca preparación en fundamentos de las bases de datos, perdona que lo diga, porque tu problema tiene que ver en este caso bastante con ello.

Las cosa vendrá a ser:
Un paciente o "cliente" de un servicio médico, como cualquier otro cliente comercial, sólo puede estar identificado por un único atributo, que es en ese sentido su PRIMARY KEY. Una primary key puede estar compuesta por uno o más atributos simultáneamente, pero en tu caso dices que la "ficha" del paciente es en Nro 148100, que debería ser la identificación del paciente. Entonces debo suponer que el "0" es un código de uso interno de algún tipo que se refiere a alguna característica o del paciente o de la atención recibida.
Si es una condición de paciente, se trata de algo que no pertenece a la PK y por tanto no debe estar "combinado" en la tabla con el numero de ficha. Si es algo relacionado con la atención, no puede pertenecer a la tabla sino a otra, porque es lógico pensar que un paciente puede recibir N atenciones por razones diferentes.
En cualquier caso, y esto lo debes tener en cuenta, el que tu hagas que el numero de la ficha aparezca como dos campos separados ("148100" y "0"), o uno solo ("148100-0") es absolutamente irrelevante para el almacenamiento de los datos, porque se trata de un problema de visualización, de representación en pantalla, y los problemas de visualización no son dominio de la base, sino de las aplicaciones. La base simplemente lo puede devolver formateado, pero datos de distintos dominios no deben combinarse en un mismo campo.
La razón de esto es simple: Si tu almacenas los datos combinados (como dices hacerlo), las consultas se complican y las actualizaciones de datos también porque tienen una enorme inconsistencia de datos, ya que en unas tablas el número de ID de la ficha paciente aparecerá como "148100-0" y en otros como "148100". Eso se denomina "inconsistencia", y es un defecto grave.

Como puedes apreciar, hay algunas cuantas cosas y análisis que afectan tanto al diseño de las tablas como a la resolución de las consultas. Son importantes de resolver a tiempo porque eventualmente te traerán problemas (de perfomance, de consistencia, etc.). No digo que pueden traerte problemas, te van a traer problemas porque cuando la base esté en trabajo estará acarreando problemas que se incrementarán a medida que los datos vayan creciendo.
Es mejor resolverlos ahora, que todavía estás a tiempo, y no luego, cuando el problema se vuelva mucho más grande.

Resumiendo:
Para que las consultas se puedan optimizar y devuelvan datos seguros sin el uso de funciones innecesarias, es conveniente que ajustes la estructura de tus tablas de modo que esos dos datos (148100 y 0) se encuentren en campos separados, tales que se pueda hacer el JOIN sin problemas y realmente devuelva los datos esperados.
También sería bueno revisar la estructura completa de las tablas implicadas para ver si están cumpliendo al menos la tercera forma normal (3FN) de modo de poder asegurar que la perfomance de las consultas sea mínimamente optima.

El resto es generar las consultas que necesites.

¿Podrías postear la estructura de las dos tablas implicadas y describir un poco qué representa ese valor "0" exactamente, cómo identificas al paciente y qué es lo que representa la ficha (atención o registración del paciente)?
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #10 (permalink)  
Antiguo 10/12/2010, 14:56
 
Fecha de Ingreso: noviembre-2010
Mensajes: 55
Antigüedad: 14 años
Puntos: 0
Respuesta: como ago esta consulta

hola amigo mira llevo ya 2 dias con esto pense que lo habia resolvido pero no es asi pasa lo siguiente tengo dos tablas la primer tabla se llama jqcalendar tiene la siguiente estructura:

Código MySQL:
Ver original
  1. Subject       StartTime
  2.  
  3.       ---------        ----------------
  4.  
  5.       148100-0     2010-12-01
  6.  
  7.       298852-0     2010-12-13
  8.  
  9.       298852-0     2010-12-23
  10.  
  11.       366005-12   2010-12-22
  12.  
  13.       366005-12   2010-12-29

bueno como ves son dos campos que tiene esa tabla el primer campo que es Subject almacena la ficha del usuario el segundo campo que es StartTime almacena la fecha a la que asistira el usuario como pueden ver se repite varias veces la ficha y yo no quiero eso asi que use group by para areglar ese problema , bueno la otra tabla es esta se llama reporte tiene la siguiente estructura

Código SQL:
Ver original
  1. ficha          codigo      oms
  2.  
  3.       ------        --------        ---------
  4.  
  5.       148100        0              A00
  6.  
  7.       298852        0              A00
  8.  
  9.       366005        12            C00

esta tabla reporte tiene 3 campos la primera es ficha la segunda codigo , en estos dos campos are una aclaracion ya que la ficha del paciente va acompañada de su respectivo codigo ejemplo 366005-12 despues del guion es el codigo en este caso el codigo es 12 bueno como puedes ver en esta tabla reporte los inserto por separado y en la tabla jqcalendar lo inserto junto osea la ficha y el codigo . por que? bueno por que la tabla jqcalendar es de una agenda ya prediseñada echa con ajax,php(poo) y esos conceptos aun no los entiendo bien y si le agregaba 2 campos mas osea ficha y codigo me marcaria error la agenda asi que solo ocupe el campo subject que ya estaba creado en esa tabla para almacenar la ficha y el codigo juntos el codigo que estoy ocupando es este
Código PHP:
$ini="2010-12-01 00:00:00";
$fin="2010-12-31 23:59:59";
conectar();
$jcalendar=mysql_query("select * FROM jqcalendar  WHERE StartTime   BETWEEN '$ini' AND '$fin' AND asistencia='1' GROUP BY Subject "); 
    
desconectar();

  
if (
mysql_num_rows($jcalendar)>0)

{

while (
$rowj=mysql_fetch_array($jcalendar))

{
   
//sepasro la ficha del codigo que extraigo de la tabla jcalendar
   
$ficha=$rowj[1];
   
$partes=explode('-',$ficha);
   
$aa=$partes[0];
   
$bb=$partes[1];




conectar();
$queEmp2 mysql_query("
SELECT oms FROM reporte where ficha='$aa' and codigo='$bb' GROUP BY oms  "
);
$rowEmp2 mysql_fetch_assoc($queEmp2);
 echo  
$cat=$rowEmp2['oms']."<br>";
 
desconectar();


}

             
}
//cierro el if 
bueno como los reportes son por rango de fecha por eso primero ago una consulta a la tabla jcalendar para buscar el rango de fecha que introdusca el usuario de ahi si existen esas fechas introducidas yo lo que quiero es contar cuantos oms se repiten de la tabla reporte para eyo valido que la ficha y el codigo que se extrae de la tabla jcalendar sea igual ala que esta en la tabla reporte pero no me sale me aroja esto
A00
A00
9999

siendo que me deveria de arojar esto por que estoy agrupando el oms
A00
9990

Etiquetas: ago
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 17:54.