Hola, alguien podria ayudarme a crear columnas para las tablas de un codigo php. Es un modelo de un foro super simple.
En las funciones insert de los metodos add_topic y add_post() tengo declaradas las columnas de las tablas, o eso tengo entendido xD Lo unico que no se hacer es dar datos a las columnas hehe.
Alguien podria ayudarme a saber que tipo de datos necesita cada columna??
Para añadir un topic a la DB uso esto:
// Insert the topic
$insert_topic = $this->DB->insert("forum_topics", array(
'topic_subject' => $subject,
'topic_by' => $poster,
'last_post_time' => $time,
'topic_forum' => $forum,
'is_sticky' => $sticky,
'is_closed' => $closed,
'is_global' => $global
));
// Insert the actual post
$insert_post = $this->DB->insert("forum_posts", array(
'post_content' => $content,
'post_by' => $poster,
'post_time' => $time,
'post_topic' => $topicid
));
// Update the forum count
$rows = $this->DB->update("forum_forums", array(
'total_topics' => "(`total_topics` + 1)",
'total_posts' => "(`total_posts` + 1)",
'last_post_id' => $lastpost_id,
'last_topic_id' => $topicid,
'last_topic_title' => $subject,
'last_post_time' => $time,
'last_post_poster' => $poster
), "`forum_id`='".$forum."'");
Por lo que tengo que crear las tablas con esa informacion, por ejemplo:
-- --------------------------------------------
-- Table structure for `forum_topic`
-- --------------------------------------------
DROP TABLE IF EXISTS `forum_topic`
CREATE TABLE `forum_topic` (
`topic_subject` varchar(100) NOT NULL, // varchar porque es una cadena de caracteres, ¿cierto?
`topic_by`,
`last_post_time`,
`topic_forum`,
`is_sticky`,
`is_closed`,
`is_global`,
PRIMARY KEY (``)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
Por lo que se, los datos de las columnas van en función al tipo de datos que se va a insertar dentro de ellas, por ejemplo, si se va a insertar un numero seria del tipo int(cantidadmaxima). Es parecido cuando declaras en c o c++, tienes que decirlo que tipo de caracter es, ¿cierto? Corregirme si me equivoco en algo.
Estoy empezando con todo esto de php y las bases de datos y necesito algo de ayuda :S
Gracias
salu2
dew ;)
Puedes tomar el ejemplo la tabla topics de SMF 2
CREATE TABLE {$db_prefix}topics (
id_topic mediumint(8) unsigned NOT NULL auto_increment,
is_sticky tinyint(4) NOT NULL default '0',
id_board smallint(5) unsigned NOT NULL default '0',
id_first_msg int(10) unsigned NOT NULL default '0',
id_last_msg int(10) unsigned NOT NULL default '0',
id_member_started mediumint(8) unsigned NOT NULL default '0',
id_member_updated mediumint(8) unsigned NOT NULL default '0',
id_poll mediumint(8) unsigned NOT NULL default '0',
id_previous_board smallint(5) NOT NULL default '0',
id_previous_topic mediumint(8) NOT NULL default '0',
num_replies int(10) unsigned NOT NULL default '0',
num_views int(10) unsigned NOT NULL default '0',
locked tinyint(4) NOT NULL default '0',
unapproved_posts smallint(5) NOT NULL default '0',
approved tinyint(3) NOT NULL default '1',
PRIMARY KEY (id_topic),
UNIQUE last_message (id_last_msg, id_board),
UNIQUE first_message (id_first_msg, id_board),
UNIQUE poll (id_poll, id_topic),
KEY is_sticky (is_sticky),
KEY approved (approved),
KEY id_board (id_board),
KEY member_started (id_member_started, id_board),
KEY last_message_sticky (id_board, is_sticky, id_last_msg),
KEY board_news (id_board, id_first_msg)
) ENGINE=MyISAM;
Un consejo:
Deshágase de las tablas de texto
Con frecuencia, al hacer consultas de ordenación (sort), union (join) y otras operaciones, MySQL necesita para crear una tabla temporal. MySQL por lo general trata de crear estos como las tablas de memoria, sin embargo, si la tabla resultante es TEXT o BLOB, es incapaz de hacer esto, en lugar de crearlo como una tabla MyISAM en el disco. Esto puede matar a rendimiento si no se han / tmp montada en la memoria o si tiene un key buffer pequeño.
La conversión de las columnas TINYTEXT a VARCHAR (255) es recomendado.
Fuente:
http://www.simplemachines.org/community/index.php?topic=293441.msg1935333#msg1935333
Muchas gracias, voy a ver si lo estudio y me entero un poco del asunto hehe
Gracias!
salu2
dew ;)