Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > БД в Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 27.07.2008, 23:12   #1
Stanislav
Квадрокоптерист
Участник клуба Подтвердите свой е-майл
 
Регистрация: 29.09.2007
Сообщений: 1,824
По умолчанию Объеденение 2-х таблиц

Добрый вечер.
Помогите пожайлусто понять / осуществить как установить связь между двумя таблицами (бд mysql)


Делал так:

CREATE TABLE user (
id int(11) NOT NULL auto_increment,
name varchar(20) NOT NULL default '',
pass varchar(20) NOT NULL default '',
PRIMARY KEY (id),
KEY id (id),
KEY name (name)
) TYPE=MyISAM"



CREATE TABLE message (
id integer(11) NOT NULL,
qvation varchar(20) NOT NULL default '',
answer varchar(20) NOT NULL default '',
KEY id (id)
)"


SELECT * FROM user INNER JOIN message ON user.id=message.id"

Связь нужна 1 ко многим

В принципе эта схема работает только вот значение ID таблицы message при заполнение всегда равно 0 а мне нужно чтоб это значение было равно id таблицы user (там стоит автоинкремент)

Подскажите как это осуществить...


p.s Если эта топ не имеет отношение к этому разделу прошу извенить просто уже незнаю куда писать...
Я часть той силы, что вечно хочет зла, но вечно совершает благо..
Stanislav вне форума Ответить с цитированием
Старый 27.07.2008, 23:35   #2
Банзай
Пользователь
 
Аватар для Банзай
 
Регистрация: 21.08.2007
Сообщений: 89
По умолчанию

ну вот связь 1хn по полю index_user и id_user
Код:
CREATE TABLE user (
id_user int(11) NOT NULL auto_increment,
name varchar(20) NOT NULL default '',
pass varchar(20) NOT NULL default '',
PRIMARY KEY (id_user),
KEY name (name)
) TYPE=MyISAM



CREATE TABLE message (
id_message int(11) NOT NULL auto_increment,
index_user integer(11) NOT NULL,
qvation varchar(20) NOT NULL default '',
answer varchar(20) NOT NULL default '',
KEY id_message (id_message),
FOREIGN KEY (Index_user) REFERENCES user (id_user) ON DELETE CASCADE
)

SELECT * FROM message,user WHERE index_user=id_user
а что вы хотите сделать чтот не пойму.
подписываюсь

Последний раз редактировалось Банзай; 27.07.2008 в 23:53.
Банзай вне форума Ответить с цитированием
Старый 27.07.2008, 23:57   #3
Stanislav
Квадрокоптерист
Участник клуба Подтвердите свой е-майл
 
Регистрация: 29.09.2007
Сообщений: 1,824
По умолчанию

Цитата:
Сообщение от Банзай Посмотреть сообщение
ну вот связь 1хn по полю index_user и id_user
Код:
CREATE TABLE user (
id_user int(11) NOT NULL auto_increment,
name varchar(20) NOT NULL default '',
pass varchar(20) NOT NULL default '',
PRIMARY KEY (id),
KEY id (id),
KEY name (name)
) TYPE=MyISAM



CREATE TABLE message (
id_message int(11) NOT NULL auto_increment,
index_user integer(11) NOT NULL,
qvation varchar(20) NOT NULL default '',
answer varchar(20) NOT NULL default '',
KEY id_message (id_message),
FOREIGN KEY (Index_user) REFERENCES user (id_user) ON DELETE CASCADE
)

SELECT * FROM message,user WHERE index_user=id_user
а что вы хотите сделать чтот не пойму.
Мне нужна простая схема:
две таблицы связь 1 ко многим структура такого типа

USER ----- VASY
PASS ----- 1234

У этого пользователя имееться множество сообщений
таблица message

qvation------- Why?
answer------- Because!

qvation------- Why2?
answer------- Because2!


Вот в принципе что мне нужно.

Теперь у меня вопрос почему у вас в таблице message
id_message тип автоинкремент он же должен быть равен полю id_user

И даже при этом раскладе все равно дает ошибку следующего характера

"Ошибка при выполнении запроса: Unknown column 'user.id' in 'on clause' "
Что это значит?

а вот мой исходник на php который пытается создать эти таблицы


Код:
<?php 
$connection = mysql_connect ("localhost", "root", "") or die 
("Ошибка соединения с сервером");


$db=mysql_selectdb ("auth", $connection)
or die ("Ошибка при выборе базы данных");

$query="CREATE TABLE user (   
id_user int(11) NOT NULL auto_increment,   
name varchar(20) NOT NULL default '',   
pass varchar(20) NOT NULL default '',   
PRIMARY KEY (id_user),   
KEY id_user (id_user),   
KEY name (name)   
) TYPE=MyISAM "; 

$result=mysql_query ($query) or die ("Ошибка при выполнении запроса: ".mysql_error ());

$query="CREATE TABLE message (  
id_message int(11) NOT NULL auto_increment,   
index_user integer(11) NOT NULL,   
qvation varchar(20) NOT NULL default '',   
answer varchar(20) NOT NULL default '',   
KEY id_message (id_message),   
FOREIGN KEY (Index_user) REFERENCES user (id_user) ON DELETE CASCADE   
) " ;

$result=mysql_query ($query) or die ("Ошибка при выполнении запроса: ".mysql_error ());






echo "Таблица 'USER - MESSAGE' успешно создана";
mysql_close ($connection);
?>

PRIMARY KEY (id),
KEY id (id),

Это я так понимаю мне нужно исправить на это:

PRIMARY KEY (id_user),
KEY id_user (id_user),

ну все равно ошибка...
Я часть той силы, что вечно хочет зла, но вечно совершает благо..

Последний раз редактировалось Stanislav; 28.07.2008 в 00:00.
Stanislav вне форума Ответить с цитированием
Старый 28.07.2008, 09:44   #4
Банзай
Пользователь
 
Аватар для Банзай
 
Регистрация: 21.08.2007
Сообщений: 89
По умолчанию

Цитата:
Сообщение от Stanislav Посмотреть сообщение
Мне нужна простая схема:
две таблицы связь 1 ко многим структура такого типа
USER ----- VASY
PASS ----- 1234
У этого пользователя имееться множество сообщений
таблица message
qvation------- Why?
answer------- Because!
qvation------- Why2?
answer------- Because2!
Вот в принципе что мне нужно.
значит правильно: при добавлении нового пользователя ему автоматически присваивается id_user, при добавлении новых сообщений от этого юзера значение его поля id_user нужно заносить в новое поле index_user.
Цитата:
Сообщение от Stanislav Посмотреть сообщение
Теперь у меня вопрос почему у вас в таблице message
id_message тип автоинкремент
id_message здесь как праймари кей для идентификации полей, он в запросе не участвует (у одного пользователя может быть много сообщений и index_user в отличии от id_message может повторяться)

Цитата:
Сообщение от Stanislav Посмотреть сообщение
"Ошибка при выполнении запроса: Unknown column 'user.id' in 'on clause' "
Что это значит?
это уже в запросе на вывод, там нет поля user.id
подписываюсь
Банзай вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Объеденение полей запроса в для отображения нескольких полей в одном списке mrCreator Microsoft Office Access 3 08.08.2009 00:53
Сведение таблиц Funky_man Microsoft Office Excel 1 09.01.2008 07:20
Сведение таблиц Funky_man Microsoft Office Excel 1 08.01.2008 03:36
Связь таблиц БД kaa БД в Delphi 5 18.09.2007 18:29
Обновление таблиц Office Microsoft Office Excel 1 31.07.2007 09:09