[AYUDA-sql]

shako

/Abajo del codigo explico mi problema/

Estoy con un proyecto una especie de blog, y en el index muestro las 2 ultimas noticias que en el titulo muestra su el usuario que la creo

para lo que utilizo la sentencia

SELECT noticia.id, 'user-id', usuario.id, fecha, titulo, descripcion, url, nick, nivel FROM noticia INNER JOIN usuario ORDER BY fecha DESC limit 1;

y

SELECT noticia.id, 'user-id', usuario.id, fecha, titulo, descripcion, url, nick, nivel FROM noticia INNER JOIN usuario ORDER BY fecha DESC limit 1,1;

la base de datos es esta:

CREATE TABLE db__proyecto.usuario (id INT( 3 ) NOT NULL AUTO_INCREMENT PRIMARY KEY ,admin int( 1 ) NOT NULL ,nick VARCHAR( 15 ) NOT NULL ,nombre VARCHAR( 25 ) NOT NULL ,apellido VARCHAR( 35 ) NOT NULL ,password VARCHAR( 60 ) NOT NULL ,fecha-nac VARCHAR( 10 ) NOT NULL ,pais VARCHAR( 15 ) NULL ,ciudad VARCHAR( 30 ) NULL ,mail VARCHAR( 30 ) NOT NULL ,link VARCHAR( 150 ) NULL ,link-desc VARCHAR( 150 ) NULL ,firma VARCHAR( 300 ) NULL ,fecha-registro INT( 11 ) NOT NULL ,nivel VARCHAR( 25 ) NOT NULL ,UNIQUE (nick ,mail)) ENGINE = InnoDB

CREATE TABLE db__proyecto.noticia (id INT( 4 ) NOT NULL AUTO_INCREMENT PRIMARY KEY ,fecha INT( 11 ) NOT NULL ,titulo VARCHAR( 45 ) NOT NULL ,descripcion VARCHAR( 130 ) NOT NULL ,cuerpo VARCHAR( 500 ) NOT NULL ,opinion VARCHAR( 500 ) NOT NULL ,url VARCHAR( 150 ) NULL ,url2 VARCHAR( 150 ) NULL ,url3 VARCHAR( 150 ) NULL ,user-id INT( 3 ) NOT NULL ,img VARCHAR( 100 ) NOT NULL) ENGINE = InnoDB

ALTER TABLE noticia ADD INDEX ( user-id );

ALTER TABLE noticia ADD FOREIGN KEY ( user-id ) REFERENCES db__proyecto.usuario (id) ON DELETE CASCADE ON UPDATE CASCADE;

CREATE TABLE db__proyecto.comentario (id INT( 5 ) NOT NULL AUTO_INCREMENT ,cuerpo VARCHAR( 500 ) NOT NULL ,fecha INT( 11 ) NOT NULL ,user-id INT( 3 ) NOT NULL ,tipo INT( 1 ) NOT NULL ,PRIMARY KEY ( id )) ENGINE = InnoDB

ALTER TABLE comentario ADD INDEX ( user-id );

ALTER TABLE comentario ADD FOREIGN KEY ( user-id ) REFERENCES db__proyecto.usuario (id) ON DELETE CASCADE ON UPDATE CASCADE;

Buen el problema que tengo es que al mostrar la noticia y el usuario que la creo, no me muestra el verdadero usuario, sino que, lo que creo que hace es una lista de usuarios y le asigna cualquier noticia (en orden descendente por la fecha) sin respetar el user-id

lo mismo me pasa cuando veo todas las noticias que hay

SELECT noticia.id, fecha, titulo, nombre, apellido, nick FROM noticia INNER JOIN usuario ORDER BY fecha DESC;

al utilizar esta sentencia me (habiendo 2 usuarios y 2 noticias creados en la base de datos) me muestra 4 noticias noticia1-usuario1, noticia1-usuario2, noticia2-usuario2 y noticia2-usuario1

algo que tambien me parece raro, alguien me podria ayudar??

pd: no he puesto

por que se ve fatal la letra

r2d2rigo

LEFT JOIN en lugar de INNER JOIN?

Z3R0KULL

Ahora mismo estoy un poco espeso pero creo seria asi

SELECT noticia.id, fecha, titulo, descripcion, url, nick, nivel FROM noticia INNER JOIN usuario where user-id = usuario.id ORDER BY fecha DESC limit 1;

Te he quitado de la consulta el user-id/usuario.id por que no entiendo por que quieres mostar el codigo de usuario, creo que con que salga el nick es suficiente

JuAn4k4

podrias dejarle a la bd que decidiera si hacer inner join o no.

from noticia,usuario

nunca use inner join, left join ni nada de eso, ¿ para eso estan los optimizadores no ?

PD: Te falta el WHERE

No es nada raro lo que te hace, te hace el producto cartesiano de las 2 tablas ( El join ), empareja todo con todo, y luego hace comparaciones.

canhaya

ya ves, que manera de complicarte el código colega.

shako

#3 gracias era eso, y que al poner user-id en la sentencia sql me lo tomaba como texto ^^ asi que modifique el campo y lo deje en user

SELECT noticia.id, 'user', usuario.id, fecha, titulo, descripcion, url, nick, nivel FROM noticia INNER JOIN usuario WHERE user = usuario.id ORDER BY fecha DESC;

gracias ^^

Usuarios habituales

  • shako
  • canhaya
  • JuAn4k4
  • Z3R0KULL
  • r2d2rigo