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

como puedo hacer que una variable no se repita

Estas en el tema de como puedo hacer que una variable no se repita en el foro de Mysql en Foros del Web. hola amigos bueno resolvi un problema pero me meti en otro tengo la siguiente tabla llamada jqcalendar sus campos y valores son los siguientes @import ...
  #1 (permalink)  
Antiguo 11/12/2010, 14:54
 
Fecha de Ingreso: noviembre-2010
Mensajes: 55
Antigüedad: 13 años, 5 meses
Puntos: 0
como puedo hacer que una variable no se repita

hola amigos bueno resolvi un problema pero me meti en otro tengo la siguiente tabla llamada jqcalendar sus campos y valores son los siguientes
Código SQL:
Ver original
  1. Subject      StartTime        oms
  2. ---------       -----------      ----------
  3. 148100-0    2010-12-01       a00
  4. 148100-0    2010-12-02       a00
  5. 148100-0    2010-12-05       a00
  6. 298852-0    2010-12-13       b00
  7. 298852-0    2010-12-24       b00
bien el campos subject almacena la ficha del paciente como pueden ver se repite varias veces pero varia la fecha al igual que el campo oms se repite varias veces para la misma ficha bien yo lo que deceo hacer es una consulta por rango de fecha algo asi 2010-12-01 al 2010-12-05 en este caso entre esas dos fechas entraria la ficha 148100-0 que tiene 3 oms repetidas y el resultado me lo arojaria asi
Código MySQL:
Ver original
  1. ficha              fecha                 oms
  2. 148100-0    2010-12-01       a00
  3. 148100-0    2010-12-02       a00
  4. 148100-0    2010-12-05       a00
y yo no deceo eso yo deceo que si es la misma fichaque se encuentre dentro de el rango de las fechas me la agrupe en una sola la ficha y su respectivo oms y me aroje algo asi
ficha :148100-0
oms:1
les agredeceria cualquier ayuda que me puedan brindar
  #2 (permalink)  
Antiguo 11/12/2010, 15:01
Avatar de spider_boy  
Fecha de Ingreso: diciembre-2003
Ubicación: Chile
Mensajes: 1.855
Antigüedad: 20 años, 4 meses
Puntos: 89
Respuesta: como puedo hacer que una variable no se repita

Con SELECT DISTINCT puedes hacerlo. Por cierto... si tienes alguna duda con respecto a SQL, usa su respectivo foro, aunque estés usando PHP.

Saludos.
__________________
Nunca te olvidaré mi negra hermosa. Te extraño demasiado.
  #3 (permalink)  
Antiguo 11/12/2010, 15:06
 
Fecha de Ingreso: noviembre-2010
Mensajes: 55
Antigüedad: 13 años, 5 meses
Puntos: 0
Respuesta: como puedo hacer que una variable no se repita

Cita:
Iniciado por spider_boy Ver Mensaje
Con SELECT DISTINCT puedes hacerlo. Por cierto... si tienes alguna duda con respecto a SQL, usa su respectivo foro, aunque estés usando PHP.

Saludos.
ya lo intente y no me sale me aroja asi como esto ocupe este codigo
Código PHP:
conectar();
$reporte=mysql_query("select DISTINCT(oms),count(oms) as num FROM jqcalendar  WHERE StartTime   BETWEEN '$ini' AND '$fin' GROUP BY Subject "); 
desconectar();

if (
mysql_num_rows($reporte)>0)
{
while (
$row=mysql_fetch_array($reporte))
{

echo 
$row['num']."<br>";

}



                

}
//cierro el if 
y el resultado es esto
3
2
  #4 (permalink)  
Antiguo 11/12/2010, 15:14
Avatar de spider_boy  
Fecha de Ingreso: diciembre-2003
Ubicación: Chile
Mensajes: 1.855
Antigüedad: 20 años, 4 meses
Puntos: 89
Respuesta: como puedo hacer que una variable no se repita

Lee esta página, específicamente el último comentario (solo hay 2 )

http://dev.mysql.com/doc/refman/5.5/...imization.html
__________________
Nunca te olvidaré mi negra hermosa. Te extraño demasiado.
  #5 (permalink)  
Antiguo 11/12/2010, 15:29
 
Fecha de Ingreso: noviembre-2010
Mensajes: 55
Antigüedad: 13 años, 5 meses
Puntos: 0
Respuesta: como puedo hacer que una variable no se repita

con eso me quieres decir que debo utilizar una sub consulta?????
  #6 (permalink)  
Antiguo 11/12/2010, 15:32
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 17 años, 10 meses
Puntos: 2135
Tema movido desde PHP a Mysql
  #7 (permalink)  
Antiguo 11/12/2010, 16:13
Avatar de spider_boy  
Fecha de Ingreso: diciembre-2003
Ubicación: Chile
Mensajes: 1.855
Antigüedad: 20 años, 4 meses
Puntos: 89
Respuesta: como puedo hacer que una variable no se repita

A ver... utiliza esta consulta, y ves si funciona :

Código MySQL:
Ver original
  1. SELECT DISTINCT oms FROM jqcalendar WHERE StartTime BETWEEN '$ini' AND '$fin'
__________________
Nunca te olvidaré mi negra hermosa. Te extraño demasiado.
  #8 (permalink)  
Antiguo 11/12/2010, 16:20
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 4 meses
Puntos: 2658
Respuesta: como puedo hacer que una variable no se repita

Sigues insistiendo con el mismo problema, publicandolo una y otra vez en PHP, cuando el problema lo tienes que resolver en MySQL, como bien notan todos, incluyendo a GatorV, que todas las vueltas te lo traslada...

Yo ya te di algunas sugerencias, pero todas las soluciones prácticas y óptimas para tu problema van a pasar eventualmente por mejorar el diseño de la base, de las inserciones y de las consultas. No por una cuestion de formas de representación.
Entiendo los límites de tu proyecto, pero si no se puede analizar mejor el sistema o modelar mejor la base, las consultas tendrás problemas constantemente.

Tu problema es fácil de resolver por SQL, pero requiere manejar los valores de Subject, Code, StartTime y oms como columnas separadas en ambas tablas. De esa forma la consulta se vuelve muy simple de diseñar. Pero si quieres que sí o si esos valores de Subject y Code se combinen en la base en una columna, no sólo tendrás problemas para diseñar la consulta y de performance. Eventualmente puedes tener problemas de consistencia de datos.
AL menos esta es mi visión de tu problema.

Pero, bueno, es tu decisión. Yo no te voy a insistir en este tema.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #9 (permalink)  
Antiguo 11/12/2010, 16:30
 
Fecha de Ingreso: noviembre-2010
Mensajes: 55
Antigüedad: 13 años, 5 meses
Puntos: 0
Respuesta: como puedo hacer que una variable no se repita

con la consulta que me dejaste osea esta
Código PHP:
conectar();
$reporte=mysql_query(
      SELECT DISTINCT oms FROM jqcalendar WHERE StartTime BETWEEN '$ini' AND '$fin'"
); 
desconectar();

if (
mysql_num_rows($reporte)>0)
{
while (
$row=mysql_fetch_array($reporte))
{

echo 
$row['oms']."<br>";

}



                

}
//cierro el if  

?> 
me aroja solo 1 oms asi
A00
exactamente es lo que yo deceo pero ahora como le puedo hacer para que me cuente los oms dependiendo de los que se encuentre en lle rango de las fechas
osea algo asi
A00=2
  #10 (permalink)  
Antiguo 11/12/2010, 16:31
 
Fecha de Ingreso: noviembre-2010
Mensajes: 55
Antigüedad: 13 años, 5 meses
Puntos: 0
Respuesta: como puedo hacer que una variable no se repita

Cita:
Iniciado por gnzsoloyo Ver Mensaje
Sigues insistiendo con el mismo problema, publicandolo una y otra vez en PHP, cuando el problema lo tienes que resolver en MySQL, como bien notan todos, incluyendo a GatorV, que todas las vueltas te lo traslada...

Yo ya te di algunas sugerencias, pero todas las soluciones prácticas y óptimas para tu problema van a pasar eventualmente por mejorar el diseño de la base, de las inserciones y de las consultas. No por una cuestion de formas de representación.
Entiendo los límites de tu proyecto, pero si no se puede analizar mejor el sistema o modelar mejor la base, las consultas tendrás problemas constantemente.

Tu problema es fácil de resolver por SQL, pero requiere manejar los valores de Subject, Code, StartTime y oms como columnas separadas en ambas tablas. De esa forma la consulta se vuelve muy simple de diseñar. Pero si quieres que sí o si esos valores de Subject y Code se combinen en la base en una columna, no sólo tendrás problemas para diseñar la consulta y de performance. Eventualmente puedes tener problemas de consistencia de datos.
AL menos esta es mi visión de tu problema.

Pero, bueno, es tu decisión. Yo no te voy a insistir en este tema.
ok amigo ydisculpa ya recorde que tu en el post anterior me diste 3 consultas para revisarlas en donde yo pretendia hacer lo que deceo hacer pero con 2 tablas y de echo ocupe una de eyas de las que me dejaste , y asia exacatemente lo que deceaba pero me contaba en generarl es decir si yo tenia 3 oms de este tipo asi A00 me aparecia asi
A00=3
esto era lo que yo quiero , pero esa valor se quedaba fijo es decir si la fecha cambiaba y solo habia un registro entre ese rango de fechas con A00 aun asi me seguia aparecion
A00=3
siendo que me deveria de aparecer
A00=1
por que nada mas se encontro aun paciente entre ese rango de fechas entonces no se aque devia eso le movi por todos lados y no me resulto entonces ahora lo que ise fue meter el campo oms en la misma tabla en donde se encuentran las fechas te agradeceria cual quier ayuda amigo y disculpame si lo he publicado lo que pasa esque ya me estrese y se me viene el tiempo encima y no se que hacer=( se que mi error esta en sql pero no se en que parte

Última edición por zero_cool_firewall; 11/12/2010 a las 17:01
  #11 (permalink)  
Antiguo 12/12/2010, 19:13
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 4 meses
Puntos: 2658
Respuesta: como puedo hacer que una variable no se repita

Bien, yendo al problema básico:
Cita:
Iniciado por zero_cool_firewall Ver Mensaje
[...]Tengo la siguiente tabla llamada jqcalendar sus campos y valores son los siguientes
Código SQL:
Ver original
  1. Subject      StartTime        oms
  2. ---------       -----------      ----------
  3. 148100-0    2010-12-01       a00
  4. 148100-0    2010-12-02       a00
  5. 148100-0    2010-12-05       a00
  6. 298852-0    2010-12-13       b00
  7. 298852-0    2010-12-24       b00
[...]yo lo que deceo hacer es una consulta por rango de fecha algo asi 2010-12-01 al 2010-12-05 en este caso entre esas dos fechas entraria la ficha 148100-0 que tiene 3 oms repetidas y el resultado me lo arojaria asi
Código MySQL:
Ver original
  1. ficha              fecha                 oms
  2. 148100-0    2010-12-01       a00
  3. 148100-0    2010-12-02       a00
  4. 148100-0    2010-12-05       a00
y yo no deceo eso yo deceo que si es la misma fichaque se encuentre dentro de el rango de las fechas me la agrupe en una sola la ficha y su respectivo oms y me aroje algo asi
ficha :148100-0
oms:1
les agredeceria cualquier ayuda que me puedan brindar
El problema de la sugerencia de usar DISTINCT es que distinct no opera sobre un sólo campo del select, si no es dentro de funciones específicas (SUM(), GROUP_CONCAT(), etc), sino sobre el conjunto total de campos del SELECT, por lo que en realidad te devolvería todos los registros repetidos.
Pero MySQL tiene una implementación muy práctica para tu caso de GROUP BY, tan simple como:
Código MySQL:
Ver original
  1. SELECT Subject,      StartTime, oms
  2. FROM jcalendar
  3. WHERE SUBSTRING_INDEX(Subject, '-', 1) = '148100'
  4. GROUP BY Subject,  oms;
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #12 (permalink)  
Antiguo 12/12/2010, 19:59
 
Fecha de Ingreso: noviembre-2010
Mensajes: 55
Antigüedad: 13 años, 5 meses
Puntos: 0
Respuesta: como puedo hacer que una variable no se repita

hola mi brother muchas gracias por contestarme estoy preocupado de que no me sale esta consulta y es cierto como dices tu tengo muy pocos fundamentos en sql yo se que se puede hacer lo que yo deceo tengo la idea mas sin embargo no se como desarrollar la consulta en sql, buneo mira pasando a la consulta que me pusiste tengo una duda bueno esta claro que me agrupara todo los campos oms cuyo codigo sea 148100 ok pero la duda es al momento de agrupar yo veo que tu en la seleccion seleccionas 3 campos mi duda es para agrupar un campo hay que indicarlo en el selec osea asi como tu lo estas asiendo en esta parte
Código MySQL:
Ver original
  1. SELECT Subject, StartTime, oms

Última edición por zero_cool_firewall; 12/12/2010 a las 20:06
  #13 (permalink)  
Antiguo 12/12/2010, 22: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: 16 años, 4 meses
Puntos: 2658
Respuesta: como puedo hacer que una variable no se repita

Cita:
pero la duda es al momento de agrupar yo veo que tu en la seleccion seleccionas 3 campos mi duda es para agrupar un campo hay que indicarlo en el selec osea asi como tu lo estas asiendo en esta parte
Una de las diferencias entre la implementación del GROUP BY por parte de SQL Server, DB2, Postgre, Oracle, etc, y la que hace MySQL estriba precisamente en que todos los DBMS requieren que todo campo no afectado por una función agrupada debe forzosamente estar listado en el GROUP BY.
Pero MySQL hace una interpretación más literal del estandar ANSI-SQL conforme las últimas modificaciones que ANSI puso al GROUP BY. Por eso permite precisamente que se puedan agrupar campos incluso si no se listan en el SELECT, o bien, como en este caso, sólo indiquen algunos de los campos del SELECT.
¿Cómo resuelve entonces los campos que no se listan en el GROUP BY? De la forma más simple: Se pone el primer valor encontrado donde se cumpla el agrupamiento. Esto último trae algunos efectos curiosos, pero para el caso esa es la idea.
Bueno, para el caso, lo único importante es que para que la consulta de resultado, lo que debe cumplirse es el agrupamiento. Lo que pongas en el SELECt es decisión tuya.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #14 (permalink)  
Antiguo 12/12/2010, 22:26
 
Fecha de Ingreso: noviembre-2010
Mensajes: 55
Antigüedad: 13 años, 5 meses
Puntos: 0
Respuesta: como puedo hacer que una variable no se repita

aok mi amigo ya entendi lo que me explicaste mira realize la siguiente consulta guiandome de la que me planteaste
Código MySQL:
Ver original
  1. SELECT Subject,StartTime,oms
  2.       FROM jqcalendar
  3.     WHERE StartTime BETWEEN '2010-12-01 ' AND '2010-12-13 '
  4.       GROUP BY Subject,oms
en mi tabla jqcalendar tengo los sgiguientes datos
Código MySQL:
Ver original
  1. Subject                 StartTime               oms
  2. -----------              -------------          ------------
  3. 148100-0             2010-12-01            a00
  4. 148100-0             2010-12-02            a00
  5. 148100-0             2010-12-05            a00
  6. 298852-0             2010-12-13            a00
con la consulta que ise me aroja lo siguiente
a00
a00
osea no me agrupa el campo oms por eso te preguntaba que si hay que definir en el select el campo que deceo agrupar en este caso si me lo esta agrupando ya que son 2 oms iguales pero de diferente ficha bien yo no deceo que me aroje esto
a00
a00
yo quiero que me aga esto
a00=2
lo he intendato realizando una consulta de la siguiente forma
Código MySQL:
Ver original
  1. SELECT Subject,StartTime,count(oms) as numero
  2.       FROM jqcalendar
  3.     WHERE StartTime BETWEEN '2010-12-01 ' AND '2010-12-13 '
  4.       GROUP BY Subject,oms
pero con esa consulta me aroja esto
3
1
  #15 (permalink)  
Antiguo 13/12/2010, 03:45
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 4 meses
Puntos: 2658
Respuesta: como puedo hacer que una variable no se repita

Debes usar COUNT(DISTINCT field).
Como te dije en un post anterior, DISTINCT opera diferente cuando lo usas dentro de ciertas funciones, como SUM():
Código MySQL:
Ver original
  1. SELECT Subject, StartTime, COUNT(DISTINCT oms) numero
  2. FROM jqcalendar
  3. WHERE StartTime BETWEEN '2010-12-01 ' AND '2010-12-13 '
  4. GROUP BY Subject, oms;
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #16 (permalink)  
Antiguo 13/12/2010, 12:45
 
Fecha de Ingreso: noviembre-2010
Mensajes: 55
Antigüedad: 13 años, 5 meses
Puntos: 0
Respuesta: como puedo hacer que una variable no se repita

ok un ejemplo me aclaro mas como funciona DISTINCT bueno mi brother ejecute la consulta en mysql y me aroja el siguiente resultado

Código MySQL:
Ver original
  1. Subject     StartTime                 numero
  2. 148100-0    2010-12-01 08:00:00     1
  3. 298852-0    2010-12-13 09:30:00     1
la consulta fue la que me pusiste
por lo que veo si me agrupa la oms de la ficha 148100-0 por que son 3 veces que se registro con diferente fecha pero con el mismo valor del oms y por eso aparece 1 por que esta agrupando la ficha, al igual que con la ficha 298852-0 con esta ficha solo hay una fecha y un oms registrado por eso aparece 1 bien aqui ya me las esta agrupando las fichas, pero ahora como le puedo hacer para que no me paresca cuantos oms tiene de cada uno si no que en un solo campo me aparesca el valor por ejemplo en el resultado de arriba hay dos fichas diferentes pero los oms son iguales entonces me esta arojando que cada ficha tiene 1 oms ok yo lo que quiero hacer es que en ves que me lo aroje por separado me cuente un total algo asi
oms=2
claro ese resultado sera si se entroduce el rango de fechas del 2010-12-01 al 2010-12-13 ya que ahi abarcaran las dos fichas pero si se introduce 2010-12-01 al 2010-12-05 el resultado deceado que arojara sera este
oms=1
por que en el rango de las fechas solo entro la primera ficha

Etiquetas: variables
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 06:51.