Foros del Web » Programando para Internet » PHP »

Ayuda con Codigo

Estas en el tema de Ayuda con Codigo en el foro de PHP en Foros del Web. Hola tengo una web con una base de datos de noticias gamecms_news y otra con sistemas que se llama gamecms_system y otra para relacionar que ...
  #1 (permalink)  
Antiguo 12/01/2008, 15:56
 
Fecha de Ingreso: septiembre-2004
Ubicación: Chihuahua Mex
Mensajes: 404
Antigüedad: 19 años, 7 meses
Puntos: 2
Ayuda con Codigo

Hola tengo una web con una base de datos de noticias gamecms_news y otra con sistemas que se llama gamecms_system y otra para relacionar que sistema es cada noticia llamada gamecms_newsSystemLink con las tablas id,newsId,systemId, ahora estoy llamando a las ultimas noticias por sistema utilizando la tabla gamecms_newsSystemLink. Ahora mi problema es que las noticias pueden tener mas de 1 sistema seleccionado por lo que si hay 1 noticia con 2 sistemas apareceran 2 noticias identicas en las ultimas noticias, ahi alguna posibilidad de que si la noticia se repite solo aparesca una vez.

Aqui el codigo que uso para obtener las ultimas noticias
Código PHP:
function ultimasnoticias($numNews '1'$template 'latestNews') {
        
$sql "SELECT
                 gamecms_news.newsId,
                 gamecms_news.subject,
                 gamecms_news.shortNews,
                 gamecms_news.iconId,
                 gamecms_news.releaseDateTime,
         gamecms_system.systemAbbrev
                FROM
                 gamecms_newsSystemLink
            LEFT JOIN
                 gamecms_news
                ON
                 gamecms_newsSystemLink.newsId = gamecms_news.newsId
            LEFT JOIN
                 gamecms_system
                ON
                 gamecms_newsSystemLink.systemId = gamecms_system.systemId
                WHERE
                 auth='1'
                AND
                 gamecms_news.deleted='0'
                ORDER BY
                 releaseDateTime
                DESC
                 LIMIT 0, "
.$numNews;
        
$this->db->query($sql);
        
$divClass1 "t2";
        
$divClass2 "t1";
        
$rowNumber 0
        while(
$this->db->next_record()) {
            
$newsId $this->db->f("newsId");
            
$subject $this->db->f("subject");
            
$shortNews $this->db->f("shortNews");
            
$iconId $this->db->f("iconId");
            
$releaseDateTime $this->db->f("releaseDateTime");
            
$consola $this->db->f("systemAbbrev");
            
$timestamp $this->db->f("releaseDateTime");
            
$year trim(substr($timestamp04));
            
$month trim(substr($timestamp52));
            
$day trim(substr($timestamp82));
            
$hour trim(substr($timestamp112));
            
$minute trim(substr($timestamp142));
            
$date $month "-" $day "-" $year;
            
$newDate date("M j, Y"mktime(0,0,0,$month,$day,$year));
            
$time $hour ":" $minute;
            
$divClass = ($rowNumber 2) ? $divClass1 $divClass2;
            
$rowNumber++; 
            include 
"./templates/".$template.".tpl.php";
        }
    } 
Saludos y espero poder recivir respuesta
  #2 (permalink)  
Antiguo 12/01/2008, 16:13
Avatar de Carxl
Colaborador
 
Fecha de Ingreso: agosto-2006
Ubicación: Bogotá
Mensajes: 2.993
Antigüedad: 17 años, 8 meses
Puntos: 70
De acuerdo Re: Ayuda con Codigo

Hola PANAFLAKIN, cómo vas?

Quizàs esto:

Código:
select distinct gamecms_news.subject ...... 
El distinct lo que hace es que no muestra registros repetidos Se especifica cual es el atributo que no se debe repetir, osea el primero.

Saludos
__________________
Hay 10 tipos de personas, los que entienden binario y los que no. (Anónimo)
www.programandoweb.com
  #3 (permalink)  
Antiguo 12/01/2008, 16:35
 
Fecha de Ingreso: septiembre-2004
Ubicación: Chihuahua Mex
Mensajes: 404
Antigüedad: 19 años, 7 meses
Puntos: 2
Re: Ayuda con Codigo

Hola gracias por responder parece que es lo que necesito solo que no se como implementarlo a mi consulta si me pudieras ayudar estaria muy agradecido :)
  #4 (permalink)  
Antiguo 12/01/2008, 16:39
Avatar de Carxl
Colaborador
 
Fecha de Ingreso: agosto-2006
Ubicación: Bogotá
Mensajes: 2.993
Antigüedad: 17 años, 8 meses
Puntos: 70
De acuerdo Re: Ayuda con Codigo

Hola de nuevo PANAFLAKIN.

Se supone que se te repiten los registros no??

Habrà entonces algùn campo que se repita en los dos(cualquiera no?), entonces, suponiendo que se repite "subject", pues colocas ese como primer paràmetro a considerar, el resto de la consulta es igual:

Código:
select distinct gamecms_news.subject ...... 
Espero me hayas entendido...
__________________
Hay 10 tipos de personas, los que entienden binario y los que no. (Anónimo)
www.programandoweb.com
  #5 (permalink)  
Antiguo 12/01/2008, 16:44
 
Fecha de Ingreso: septiembre-2004
Ubicación: Chihuahua Mex
Mensajes: 404
Antigüedad: 19 años, 7 meses
Puntos: 2
Re: Ayuda con Codigo

la verdad no se como integrarla al query que hago no podras especificarme mas, lo siento pero nunca habia oido ni utilizado la funcion de distinct
  #6 (permalink)  
Antiguo 12/01/2008, 16:49
Avatar de Carxl
Colaborador
 
Fecha de Ingreso: agosto-2006
Ubicación: Bogotá
Mensajes: 2.993
Antigüedad: 17 años, 8 meses
Puntos: 70
Re: Ayuda con Codigo

Lee un poco: select distinct
__________________
Hay 10 tipos de personas, los que entienden binario y los que no. (Anónimo)
www.programandoweb.com
  #7 (permalink)  
Antiguo 12/01/2008, 16:53
 
Fecha de Ingreso: septiembre-2004
Ubicación: Chihuahua Mex
Mensajes: 404
Antigüedad: 19 años, 7 meses
Puntos: 2
Re: Ayuda con Codigo

Esto ya parece mensajeria instantanea gracias por responder, oye pero ¿tengo que hacer 2 consultas? una con selec distinct y otra normal o se puede poner todo en la misma
  #8 (permalink)  
Antiguo 12/01/2008, 17:42
 
Fecha de Ingreso: junio-2007
Ubicación: por ahi
Mensajes: 262
Antigüedad: 16 años, 10 meses
Puntos: 4
Re: Ayuda con Codigo

Se supone que es la misma consulta. es decir, simplemente se allade la palabra DISTINCT al inicio del query.

Seria algo asi


$sql = "SELECT DISTINCT
gamecms_news.newsId,
gamecms_news.subject,
gamecms_news.shortNews,
gamecms_news.iconId,
gamecms_news.releaseDateTime,
gamecms_system.systemAbbrev
FROM
gamecms_newsSystemLink
LEFT JOIN
gamecms_news
ON
gamecms_newsSystemLink.newsId = gamecms_news.newsId
LEFT JOIN
gamecms_system
ON
gamecms_newsSystemLink.systemId = gamecms_system.systemId
WHERE
..............
  #9 (permalink)  
Antiguo 12/01/2008, 18:54
Avatar de Carxl
Colaborador
 
Fecha de Ingreso: agosto-2006
Ubicación: Bogotá
Mensajes: 2.993
Antigüedad: 17 años, 8 meses
Puntos: 70
Re: Ayuda con Codigo

Hola de nuevo PANAFLAKIN.

Por eso te decía que miraras el link. Te explico:

distinct es una instrucción complementaria para el select, lo único que tienes que hacer es agregarla después del select, y luego escribir el campo por el que debe "distinguir". Lo que tú quieres es que no se repitan los registros, pues mira cual es el campo que se repite en las dos consultas, algo así:

Código:
select distinct campoqueserepite .... el resto de la consulta
Me entiendes ahora?

Saludos
__________________
Hay 10 tipos de personas, los que entienden binario y los que no. (Anónimo)
www.programandoweb.com
  #10 (permalink)  
Antiguo 12/01/2008, 22:06
 
Fecha de Ingreso: septiembre-2004
Ubicación: Chihuahua Mex
Mensajes: 404
Antigüedad: 19 años, 7 meses
Puntos: 2
Re: Ayuda con Codigo

Hola mira hice lo siguiente
Código PHP:
$sql "SELECT 
                 distinct gamecms_news.newsId,
                 gamecms_news.subject,
                 gamecms_news.shortNews,
                 gamecms_news.iconId,
                 gamecms_news.releaseDateTime,
                 gamecms_system.systemAbbrev
                FROM
                 gamecms_newsSystemLink
            LEFT JOIN
                 gamecms_news
                ON
                 gamecms_newsSystemLink.newsId = gamecms_news.newsId
            LEFT JOIN
                 gamecms_system
                ON
                 gamecms_newsSystemLink.systemId = gamecms_system.systemId
                WHERE
                 auth='1'
                AND
                 gamecms_news.deleted='0'
                ORDER BY
                 releaseDateTime
                DESC
                 LIMIT 0, "
.$numNews
pero me siguen apareciendo las noticias mas de una vez http://www.gamerzone.com.mx/index.html
Donde dice Noticias como ves salen repetidas
  #11 (permalink)  
Antiguo 12/01/2008, 22:16
Avatar de Carxl
Colaborador
 
Fecha de Ingreso: agosto-2006
Ubicación: Bogotá
Mensajes: 2.993
Antigüedad: 17 años, 8 meses
Puntos: 70
De acuerdo Re: Ayuda con Codigo

Hola de nuevo PANAFLAKIN.

Mira lo que estás diciendo es que te distinga gamecms_news.newsId.Estas seguro que ese es el atributo que se repite?? La idea del distinct es que a continuación de el esté el atributo que no quieras que se repita...

Si a pesar de eso sigues con el problema, mánda un ejemplo de como te arroja los registros, para mirarlo de una vez.

Saludos
__________________
Hay 10 tipos de personas, los que entienden binario y los que no. (Anónimo)
www.programandoweb.com
  #12 (permalink)  
Antiguo 12/01/2008, 22:31
 
Fecha de Ingreso: septiembre-2004
Ubicación: Chihuahua Mex
Mensajes: 404
Antigüedad: 19 años, 7 meses
Puntos: 2
Re: Ayuda con Codigo

Si mira por ejemplo este es una noticia que esta en la tabla gamecms_news

Código:
NewsId=29, subject=Nuevo tráiler de Rainbow Six Vegas 2 y las demas tablas que no son relevantes
y aqui el gamecms_newsSystemLink
Código:
id=85, newsId=29 systemId=1
Otra Linea
id=86, newsId=29 systemId=2
Otra Linea
id=87, newsId=29 systemId=3
y asi se repiten entonces como vez el newsId es lo que se repite y es lo que no quiero que salga mas de 1 vez Saludos espero que me puedas ayudar
  #13 (permalink)  
Antiguo 12/01/2008, 22:53
 
Fecha de Ingreso: enero-2008
Mensajes: 27
Antigüedad: 16 años, 3 meses
Puntos: 0
De acuerdo Re: Ayuda con Codigo

Hola PANAFLAKIN el uso del DISTINCT es correcto, pero el problema por el que te sigue saliendo la tupla repetida es por que usas el LEFT JOIN, y a final de cuentas le das preferencia a una tabla, por lo que el DISTINCT queda anulado. Te recomiendo cambies el LEFT JOIN por un INNER JOIN el cual es la opcion correcta para el DISCTINCT.

Espero te sirva, con eso debia funcionar. Me cuentas si te sale bien asi, si no para pensar que estara pasando.
  #14 (permalink)  
Antiguo 12/01/2008, 23:19
 
Fecha de Ingreso: septiembre-2004
Ubicación: Chihuahua Mex
Mensajes: 404
Antigüedad: 19 años, 7 meses
Puntos: 2
Re: Ayuda con Codigo

bueno se supone que tengo que cambiar solamente left join por inner join verdad? ya lo hice y sigue igual :S
  #15 (permalink)  
Antiguo 13/01/2008, 22:41
 
Fecha de Ingreso: septiembre-2004
Ubicación: Chihuahua Mex
Mensajes: 404
Antigüedad: 19 años, 7 meses
Puntos: 2
Re: Ayuda con Codigo

Nadie sabe en que puede fallar mi consulta?
  #16 (permalink)  
Antiguo 13/01/2008, 22:48
 
Fecha de Ingreso: enero-2008
Mensajes: 27
Antigüedad: 16 años, 3 meses
Puntos: 0
Pregunta Re: Ayuda con Codigo

Hola me podrias decir los campos de tus tablas, y poner tal como te quedo la consulta con INNER JOIN. Para ver que pasa.
  #17 (permalink)  
Antiguo 14/01/2008, 01:03
 
Fecha de Ingreso: septiembre-2004
Ubicación: Chihuahua Mex
Mensajes: 404
Antigüedad: 19 años, 7 meses
Puntos: 2
Re: Ayuda con Codigo

La tabla GAMECMS_NEWS

la tabla GAMECMS_NEWSSYSTEMLINK


mi consulta
Código PHP:
 $sql "SELECT 
                 distinct gamecms_news.newsId,
                 gamecms_news.subject,
                 gamecms_news.shortNews,
                 gamecms_news.iconId,
                 gamecms_news.releaseDateTime,
                 gamecms_system.systemAbbrev
                FROM
                 gamecms_newsSystemLink
            INNER JOIN
                 gamecms_news
                ON
                 gamecms_newsSystemLink.newsId = gamecms_news.newsId
            INNER JOIN
                 gamecms_system
                ON
                 gamecms_newsSystemLink.systemId = gamecms_system.systemId
                WHERE
                 auth='1'
                AND
                 gamecms_news.deleted='0'
                ORDER BY
                 releaseDateTime
                DESC
                 LIMIT 0, "
.$numNews
Espero puedan ayudarme
  #18 (permalink)  
Antiguo 15/01/2008, 01:50
 
Fecha de Ingreso: enero-2008
Mensajes: 27
Antigüedad: 16 años, 3 meses
Puntos: 0
Exclamación Re: Ayuda con Codigo

Cita:
Iniciado por PANAFLAKIN Ver Mensaje
Código PHP:
 $sql "SELECT 
                 distinct gamecms_news.newsId,
                 gamecms_news.subject,
                 gamecms_news.shortNews,
                 gamecms_news.iconId,
                 gamecms_news.releaseDateTime,
                 gamecms_system.systemAbbrev
                FROM
                 gamecms_newsSystemLink
            INNER JOIN
                 gamecms_news
                ON
                 gamecms_newsSystemLink.newsId = gamecms_news.newsId
            INNER JOIN
                 gamecms_system
                ON
                 gamecms_newsSystemLink.systemId = gamecms_system.systemId
                WHERE
                 auth='1'
                AND
                 gamecms_news.deleted='0'
                ORDER BY
                 releaseDateTime
                DESC
                 LIMIT 0, "
.$numNews
Espero puedan ayudarme
Ok Ok ya veo donde puede estar el problema Ya que el Distinct lo haces sobre gamecms_news.newsId.

Ahora te explico:

Cuando Realizas un Join o una consulta con dos o mas tablas en general lo que obtienes por asi decirlo es una "nueva tabla", por lo que gamecms_news.newsId ya no existira por asi decirlo sino que deberias hacer referencia al nombre de la nueva tabla es decir

distinct nuevatabla.newsId

ahora bien el nombre de la nueva tabla se lo darias tu renombrando con AS al resultado de la consulta para que hicieras algo como esto.

select distinct nuevatabla.newsId,
nuevatabla.subject,
nuevatabla.shortNews,
nuevatabla.iconId,
nuevatabla.releaseDateTime,
nuevatabla.systemAbbrev
from gamecms_newsSystemLink inner join ................. as nuevatabla

ahora que no siempre es obligatorio hacerlo asi por lo que tal vez esta sea una de esas consultas que requieren de hacerlo de esta manera.

Pruebalo y me diras, mientras dejame le hecho una hojeada mas a tus tablas mañana por que ya tengo sueño jajajaja por que por aca son las 3 am y ayer tampoco dormi mucho que digamos. Saludos
  #19 (permalink)  
Antiguo 15/01/2008, 04:03
 
Fecha de Ingreso: septiembre-2004
Ubicación: Chihuahua Mex
Mensajes: 404
Antigüedad: 19 años, 7 meses
Puntos: 2
Re: Ayuda con Codigo

Hola, gracias por tu respuesta lamentablemente no me funciono :( mira hice mi consulta asi
Código PHP:
$sql "SELECT 
                 distinct nuevatabla.newsId,
                 nuevatabla.subject,
                 nuevatabla.shortNews,
                 nuevatabla.iconId,
                 nuevatabla.releaseDateTime,
                 gamecms_system.systemAbbrev
                FROM
                 gamecms_newsSystemLink
            INNER JOIN
                 gamecms_news AS nuevatabla
                ON
                 gamecms_newsSystemLink.newsId = nuevatabla.newsId
            INNER JOIN
                 gamecms_system
                ON
                 gamecms_newsSystemLink.systemId = gamecms_system.systemId
                WHERE
                 auth='1'
                AND
                 nuevatabla.deleted='0'
                ORDER BY
                 releaseDateTime
                DESC
                 LIMIT 0, "
.$numNews
pero me sigue repitiendo las noticias :S Aqui en la parte que dice Noticias
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 11:20.