как связать таблицы?

rustoy

Новичок
как связать таблицы?

объясните популярно, как связать таблицы
Необходимо хранить часто повторяющиеся значения в других таблицах
а в основной соответственно номера их id
правильно ли созданы таблицы и что писать в запросе?


CREATE TABLE main (
id int(3) NOT NULL auto_increment,
id_city int(3) NOT NULL default '0',
id_name int(3) NOT NULL default '0',
PRIMARY KEY (id),
KEY id_name (id_city,id_name)
) TYPE=MyISAM;

INSERT INTO main VALUES (1, 1, 1);
INSERT INTO main VALUES (2, 1, 2);
INSERT INTO main VALUES (3, 2, 3);

CREATE TABLE city (
id_city int(3) NOT NULL auto_increment,
city varchar(25) NOT NULL default '',
KEY id (id_city)
) TYPE=MyISAM;

INSERT INTO city VALUES (1, 'Москва');
INSERT INTO city VALUES (2, 'Санкт-Петербург');

CREATE TABLE name (
id_name int(3) NOT NULL auto_increment,
name varchar(25) NOT NULL default '',
KEY id_dog (id_name)
) TYPE=MyISAM;

INSERT INTO name VALUES (1, 'Александр');
INSERT INTO name VALUES (2, 'Алексей');
INSERT INTO name VALUES (3, 'Сергей');

PHP:
<?
$hostname = "localhost";
$username = "second";
$password = "";
$dbName = "catalog";
$userstable_1 = "main";
$userstable_2 = "city";
$userstable_3 = "name";
MYSQL_CONNECT($hostname,$username,$password) OR DIE("Не могу создать соединение ");
@mysql_select_db("$dbName") or die("Не могу выбрать базу данных "); 
$query = "SELECT ?????? FROM ?????? WHERE ?????????????????????????????????????????????";
$result = MYSQL_QUERY($query);
$number = MYSQL_NUMROWS($result);
$i = 0;
IF ($number == 0) {
PRINT "нет совпадений";
} ELSEIF ($number > 0) {
PRINT "количество совпадений: $number<BR><BR>";
WHILE ($i < $number){
$name = mysql_result($result,$i,"name");
$city = mysql_result($result,$i,"city");
PRINT "$name,$city<BR>";
$i++;
}
}
?>
 

Анатолий

Новичок
rustoy
[offtopic]
А ты по форуму искать пробовал???
Попробуй поможет!!!

To: модератор
Мне кажется, это в можно поместить в Юмор :))
[/offtopic]
 

Patrick (KT)

Guest
Работа с базами данных. Начало.

http://phpclub.ru/detail/article/2000-11-21
 

rustoy

Новичок
как бы вам это объяснить... простую выборку из таблицы делаю без проблем.... а вот с употреблением таких ругательных слов как "LEFT JOIN" ничего не получается - мускул ругается на эту строку $number = MYSQL_NUMROWS($result);
понятия не имею где у меня ошибка- вот я и подумал может на конкретном примере кто нить подскажет, в котором будет показано от начала создания таблиц до кода пхп с самим запросом.
если это сложно, тогда просто рад, что рассмешил вас глупым вопросом ;)
 

Анатолий

Новичок
Таблица 1 (table1) t1
id | title

Таблица 2 (table2) t2
id | key_id | data
Таблицы у тебя предпологается связывать t1.id = t2.key_id

Тогда запрос можно написать так
SELECT * FROM table1 AS t1 INNER JOIN table2 AS t2 ON (t1.id = t2.key_id)

Думаю, с LEFT & RIGHT JOIN сам разберешься как работать. :)
 

rustoy

Новичок
Благодарю за консультацию - очень помогло ;)
А всем чайникам пишу рабочий вариант того, что хотел видеть

PHP:
<?
/*
#
# Структура таблицы `person`
#
CREATE TABLE person (
  id smallint(5) unsigned NOT NULL auto_increment,
  name char(60) NOT NULL default '',
  PRIMARY KEY  (id)
) TYPE=MyISAM;

#
# Дамп данных таблицы `person`
#
INSERT INTO person VALUES (1, 'Antonio Paz');
INSERT INTO person VALUES (2, 'Lilliana Angelovska');
# --------------------------------------------------------

#
# Структура таблицы `shirt`
#
CREATE TABLE shirt (
  id smallint(5) unsigned NOT NULL auto_increment,
  style enum('t-shirt','polo','dress') NOT NULL default 't-shirt',
  color enum('red','blue','orange','white','black') NOT NULL default 'red',
  owner smallint(5) unsigned NOT NULL default '0',
  PRIMARY KEY  (id)
) TYPE=MyISAM;

#
# Дамп данных таблицы `shirt`
#
INSERT INTO shirt VALUES (1, 'polo', 'blue', 1);
INSERT INTO shirt VALUES (2, 'dress', 'white', 1);
INSERT INTO shirt VALUES (3, 't-shirt', 'blue', 1);
INSERT INTO shirt VALUES (4, 'dress', 'orange', 2);
INSERT INTO shirt VALUES (5, 'polo', 'red', 2);
INSERT INTO shirt VALUES (6, 'dress', 'blue', 2);
INSERT INTO shirt VALUES (7, 't-shirt', 'white', 2);
*/


$hostname = "localhost";
$username = "second";
$password = "";
$dbName = "catalog";

MYSQL_CONNECT($hostname,$username,$password) OR DIE("Не могу создать соединение ");
@mysql_select_db("$dbName") or die("Не могу выбрать базу данных "); 
$query = "SELECT * FROM shirt AS s INNER JOIN  person AS p ON (s.owner = p.id);";
$result = MYSQL_QUERY($query);
$number = MYSQL_NUMROWS($result);
$i = 0;
$BgcolorOne="EEEEEE";
$BgcolorTwo="F9F9F9";
IF ($number == 0) {
echo "нет совпадений";
} ELSEIF ($number > 0) {
echo "количество совпадений: $number<BR><BR>";
echo "<table border=0 cellspacing=2 cellpadding=2><tr bgcolor=\"#999966\">";
echo"<td><b>id</b></td><td><b>style</b></td><td><b>color</b></td><td><b>owner</b></td></tr>";
WHILE ($i < $number){
$id = mysql_result($result,$i,"s.id");
$style = mysql_result($result,$i,"s.style");
$color = mysql_result($result,$i,"s.color");
$owner = mysql_result($result,$i,"p.name");

$bg   = ($i % 2) ? $BgcolorOne : $BgcolorTwo;
echo "<tr onmouseout=\"this.style.background='#$bg'\"onmouseover=\"this.style.background='#CCFFCC'\" style=\"BACKGROUND-COLOR: #$bg\">";
echo "<td>$id</td><td>$style</td><td>$color</td><td>$owner</td></tr>";
$i++;
}
echo "</table>";
}
?>
p.s. мануалы конечно читать надо, но иногда трудно попасть в струю без помощи настоящих ЧЕЛОВЕКОВ! :)
 
Сверху