Ver Mensaje Individual
  #6 (permalink)  
Antiguo 18/04/2008, 10:18
Avatar de mafima
mafima
 
Fecha de Ingreso: abril-2003
Ubicación: Medellin-Colombia
Mensajes: 1.109
Antigüedad: 21 años
Puntos: 24
Re: Manejar con php una base de datos grandisima

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_usuarioint(11NOT NULL auto_increment,
  `
usuariovarchar(50) default NULL,
  `
nombrevarchar(30) default NULL,
  `
generotinyint(1) default NULL,
  `
emailvarchar(50) default NULL,
  `
clavevarchar(15) default NULL,
  `
regionvarchar(6) default NULL,
  `
paisvarchar(6) default NULL,
  `
msnvarchar(50) default NULL,
  `
skypevarchar(50) default NULL,
  `
icqvarchar(50) default NULL,
  `
yahoovarchar(50) default NULL,
  `
fecha_nacimientodate default NULL,
  `
ocupaciontext,
  `
interesestext,
  `
ocupacion_entext,
  `
biografiatext,
  `
biografia_entext,
  `
fotovarchar(150) default NULL,
  `
librovarchar(255) default NULL,
  `
peliculavarchar(255) default NULL,
  `
educadortinyint(1NOT NULL default '0',
  `
empleadortinyint(1NOT NULL default '0',
  `
caserotinyint(1NOT NULL default '0',
  `
familiatinyint(1NOT NULL default '0',
  `
estudiantetinyint(1NOT NULL default '0',
  `
internacionaltinyint(1NOT NULL default '0',
  `
ver_correotinyint(1NOT NULL default '1',
  `
tmp_idint(11) default NULL,
  `
tmp_tablavarchar(60) default NULL,
  `
tmp_fechadatetime default NULL,
  `
fecha_entrodatetime default '1910-04-04 00:00:00',
  `
ID_regionsmallint(4NOT NULL default '0',
  `
ID_countrysmallint(3NOT NULL default '0',
  `
confirmacionint(11) default '0',
  `
confirmotinyint(1) default '0',
  `
ciudadvarchar(250) default NULL,
  `
fecha_ultimo_ingresodatetime default NULL,
  `
busqueda_generaltext,
  `
busqueda_languagetext,
  `
busqueda_studytext,
  `
busqueda_familytext,
  `
busqueda_housingtext,
  `
preferencia_contactotinyint(1NOT 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` (
  `
idint(7NOT NULL auto_increment,
  `
passvarchar(6character set latin1 default '',
  `
namevarchar(100character set latin1 default '',
  `
agetinyint(2) default NULL,
  `
sexvarchar(20character set latin1 default NULL,
  `
countryvarchar(2) default NULL,
  `
emailvarchar(50character set latin1 default NULL,
  `
provincevarchar(30) default NULL,
  `
destinationvarchar(2) default '',
  `
region_codevarchar(2) default '',
  `
length_stayvarchar(30character set latin1 default NULL,
  `
date_arrivalvarchar(30character set latin1 default NULL,
  `
commentslongtext character set latin1,
  `
datevarchar(20character set latin1 default '',
  `
ID_usuarioint(11NOT NULL default '0',
  `
comments_estext,
  `
activotinyint(1) default NULL,
  `
ID_pais_destinosmallint(3NOT NULL default '0',
  `
ID_region_destinosmallint(4NOT NULL default '0',
  `
ciudad_destinovarchar(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_arrivalstudents_abroad.length_staystudents_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_entrousuarios.foto,students_abroad.ID_usuario,usuarios.usuario,usuarios.genero,usuarios.fecha_nacimiento,usuarios.ID_country,usuarios.ID_regionregions.region_nameusuarios.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 DESCID_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
__________________
SEO en Medellin