Hombre pues seguro sabes mas que yo, porque ni uso explai ni PK ni FK ( es primera vez que los oigo, voy a poner la verdadera estructura de la tabla de usuarios:
Agradezco muchisimo tu ayuda, la verdad es que me siento frustrado.
Código PHP:
CREATE TABLE `usuarios` (
`ID_usuario` int(11) NOT NULL auto_increment,
`usuario` varchar(50) default NULL,
`nombre` varchar(30) default NULL,
`genero` tinyint(1) default NULL,
`email` varchar(50) default NULL,
`clave` varchar(15) default NULL,
`region` varchar(6) default NULL,
`pais` varchar(6) default NULL,
`msn` varchar(50) default NULL,
`skype` varchar(50) default NULL,
`icq` varchar(50) default NULL,
`yahoo` varchar(50) default NULL,
`fecha_nacimiento` date default NULL,
`ocupacion` text,
`intereses` text,
`ocupacion_en` text,
`biografia` text,
`biografia_en` text,
`foto` varchar(150) default NULL,
`libro` varchar(255) default NULL,
`pelicula` varchar(255) default NULL,
`educador` tinyint(1) NOT NULL default '0',
`empleador` tinyint(1) NOT NULL default '0',
`casero` tinyint(1) NOT NULL default '0',
`familia` tinyint(1) NOT NULL default '0',
`estudiante` tinyint(1) NOT NULL default '0',
`internacional` tinyint(1) NOT NULL default '0',
`ver_correo` tinyint(1) NOT NULL default '1',
`tmp_id` int(11) default NULL,
`tmp_tabla` varchar(60) default NULL,
`tmp_fecha` datetime default NULL,
`fecha_entro` datetime default '1910-04-04 00:00:00',
`ID_region` smallint(4) NOT NULL default '0',
`ID_country` smallint(3) NOT NULL default '0',
`confirmacion` int(11) default '0',
`confirmo` tinyint(1) default '0',
`ciudad` varchar(250) default NULL,
`fecha_ultimo_ingreso` datetime default NULL,
`busqueda_general` text,
`busqueda_language` text,
`busqueda_study` text,
`busqueda_family` text,
`busqueda_housing` text,
`preferencia_contacto` tinyint(1) NOT NULL default '4',
PRIMARY KEY (`ID_usuario`,`ID_region`,`ID_country`)
) ENGINE=MyISAM AUTO_INCREMENT=15011 DEFAULT CHARSET=utf8;
( son muchas columnas, y estan como primary KEY `ID_usuario`,`ID_region`,`ID_country`)
en los campos primary KEY no pongo un valor en texto sino un numero ( asi lo etngo ahora y se demora mucho al hacer una consulta relacional)
ahora otra de las tablas:
Código PHP:
CREATE TABLE `students_abroad` (
`id` int(7) NOT NULL auto_increment,
`pass` varchar(6) character set latin1 default '',
`name` varchar(100) character set latin1 default '',
`age` tinyint(2) default NULL,
`sex` varchar(20) character set latin1 default NULL,
`country` varchar(2) default NULL,
`email` varchar(50) character set latin1 default NULL,
`province` varchar(30) default NULL,
`destination` varchar(2) default '',
`region_code` varchar(2) default '',
`length_stay` varchar(30) character set latin1 default NULL,
`date_arrival` varchar(30) character set latin1 default NULL,
`comments` longtext character set latin1,
`date` varchar(20) character set latin1 default '',
`ID_usuario` int(11) NOT NULL default '0',
`comments_es` text,
`activo` tinyint(1) default NULL,
`ID_pais_destino` smallint(3) NOT NULL default '0',
`ID_region_destino` smallint(4) NOT NULL default '0',
`ciudad_destino` varchar(255) default NULL,
PRIMARY KEY (`id`,`ID_pais_destino`,`ID_region_destino`,`ID_usuario`)
) ENGINE=MyISAM AUTO_INCREMENT=5049 DEFAULT CHARSET=utf8;
y una consulta donde relaciono ambas tablas:
Código PHP:
SELECT students_abroad.ID_pais_destino,students_abroad.ID_region_destino,students_abroad.comments_es,students_abroad.date_arrival, students_abroad.length_stay, students_abroad.ciudad_destino,DATE_FORMAT(usuarios.fecha_ultimo_ingreso,'%d/%m/%Y') as fecha_ultimo_ingreso,DATE_FORMAT(usuarios.fecha_entro,'%d/%m/%Y') as fecha_entro, usuarios.foto,students_abroad.ID_usuario,usuarios.usuario,usuarios.genero,usuarios.fecha_nacimiento,usuarios.ID_country,usuarios.ID_region, regions.region_name, usuarios.ciudad,(SELECT region_name FROM regions WHERE ID_region=usuarios.ID_region) As region_origen FROM students_abroad INNER JOIN usuarios INNER JOIN regions ON students_abroad.ID_usuario=usuarios.ID_usuario AND students_abroad.ID_region_destino=regions.ID_region WHERE activo=1 GROUP BY usuarios.ID_usuario ORDER BY case when foto is not null THEN usuarios.ID_usuario END DESC, ID_usuario
saco la lista de los registrs en la tabla studing_broad y saco datos del usuario de la tabla general y lueog los ordeno primero los que tienen foto. ( esta consulta va lentisima por que la tabla de usuarios tiene mas de 12000 registros y la otra tiene casi 6000