Модераторы: skyboy, MoLeX, Aliance, ksnk

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> ввод и вывод инфы в связанные таблицы  
:(
    Опции темы
Цербер
Дата 23.12.2007, 01:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 333
Регистрация: 21.11.2007

Репутация: нет
Всего: 1



доброе время суток. 
у меня 2 таблицы, в обеих есть поле id,  в обеих табицах он первичный.
я за свою короткую практику не сталкивался со связанными таблицами, если кто то может объяснить как работать с ними, или дать ссылку на статью с доступным объяснением, буду очень признателен. smile 
заранее всех благодарю!

Это сообщение отредактировал(а) Цербер - 23.12.2007, 01:26
PM MAIL ICQ   Вверх
skyboy
Дата 23.12.2007, 02:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


неОпытный
****


Профиль
Группа: Модератор
Сообщений: 9820
Регистрация: 18.5.2006
Где: Днепропетровск

Репутация: 14
Всего: 260



Цитата(Цербер @  23.12.2007,  00:23 Найти цитируемый пост)
у меня 2 таблицы, в обеих есть поле id,  в обеих табицах он первичный.

ну, это физическая структура.
а логически таблицы как связаны? по этому id, уникальному для обоих таблиц? если да - то почему не объединить таблицы в одну? если нет - то где связь? 
информации мало.

PM MAIL   Вверх
gta4kv
Дата 23.12.2007, 11:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Walking around mad.
***


Профиль
Группа: Завсегдатай
Сообщений: 1868
Регистрация: 25.7.2006

Репутация: 4
Всего: 91



Код

select f.id as id1, f2.id as id2 from table1 f join table2 f2;


Как я понял автору надо что то типа того.



Это сообщение отредактировал(а) gta4kv - 23.12.2007, 11:32
PM MAIL   Вверх
Цербер
Дата 23.12.2007, 12:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 333
Регистрация: 21.11.2007

Репутация: нет
Всего: 1



Цитата

если да - то почему не объединить таблицы в одну?

если их можно обеъденить в одну то это вообще замечательно. если не сложно покажите как объденить?
PM MAIL ICQ   Вверх
skyboy
Дата 23.12.2007, 14:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


неОпытный
****


Профиль
Группа: Модератор
Сообщений: 9820
Регистрация: 18.5.2006
Где: Днепропетровск

Репутация: 14
Всего: 260



не знаю, понял ли ты, что я имел в виду.
вот пара таблиц:

первая:
idMan - уникальный идентификатор
name - имя

вторая:
idMan - уникальный идентификатор
surname - фамилия

сам видишь, эти две таблицы связаны по idMan. связь один-к-одному. вполне можно совместить в одну таблицу:
idMan - первичный ключ, уникальный идентификатор
name - имя
surname - фамилия
--
если у тебя ситуация другая или связь не один-к-одному, то приведи больше информации.
из
Цитата(Цербер @  23.12.2007,  00:23 Найти цитируемый пост)
у меня 2 таблицы, в обеих есть поле id,  в обеих табицах он первичный.

понятно мало.
--
впрочем, обрати внимание на пост товарища gta4kv. возможно, он быстрее меня догадался, что же тебе надо.
PM MAIL   Вверх
gta4kv
Дата 23.12.2007, 17:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Walking around mad.
***


Профиль
Группа: Завсегдатай
Сообщений: 1868
Регистрация: 25.7.2006

Репутация: 4
Всего: 91



skyboy, как я понял он делает join запрос, но у него в обеих таблицах есть поле id. 
Ведь в результате ведь не будет две таблицы с одинаковым именем..

Делая запрос 
Код

select * from table1 join table2;


Мы получаем все поля таблиц table1 и table2, а вот id поле будет только одно.

Это сообщение отредактировал(а) gta4kv - 23.12.2007, 17:41
PM MAIL   Вверх
skyboy
Дата 23.12.2007, 18:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


неОпытный
****


Профиль
Группа: Модератор
Сообщений: 9820
Регистрация: 18.5.2006
Где: Днепропетровск

Репутация: 14
Всего: 260



Цитата(gta4kv @  23.12.2007,  16:40 Найти цитируемый пост)
skyboy, как я понял он делает join запрос, но у него в обеих таблицах есть поле id. 

и в обоих таблицах это первичный ключ. он сам так сказал.
если связь идет именно по этому полю id, то очень странно генерировать в двух таблицах синхронно два одинаковых автоинкрементных поля. если же связь по другому полю, то пускай так и пишет.
а гадать можно хоть до следующей недели.
Цитата(gta4kv @  23.12.2007,  16:40 Найти цитируемый пост)
а вот id поле будет только одно

разве?  smile 
PM MAIL   Вверх
gta4kv
Дата 23.12.2007, 18:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Walking around mad.
***


Профиль
Группа: Завсегдатай
Сообщений: 1868
Регистрация: 25.7.2006

Репутация: 4
Всего: 91



Цитата(skyboy @ 23.12.2007,  18:56)
разве?  smile

Ну я так предполагаю ^_______^

видимо опять соврал :(

Это сообщение отредактировал(а) gta4kv - 23.12.2007, 19:01
PM MAIL   Вверх
Цербер
Дата 23.12.2007, 21:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 333
Регистрация: 21.11.2007

Репутация: нет
Всего: 1



уважаемые расскажу всю ситуацию=) 
существует 2 таблицы 
1-ая табл выглядит примерно так:
поле id - первичное-автоинкремент-новый id автоматом становится +1 от последнего
поле логин 
поле пасворд
 2-ая табл
поле id - первичное-автоинкремент-новый id автоматом становится +1 от последнего
поле about
Поле info

ну как вы поняли 2 таблицы, в одной логин и пас, в другой инфа всякая.
как сделать, что бы,  при регистрации юзеря в таблицу №1 ему создавался id и в таблице №2
и в дальнейшем делать update select insert из таблицы №2 зная логин из таблицы №1.
 и буду очень признателен если кто нить оставит ссылку на статью о связывание таблиц в мускуле для дальнейшего ознакомления и инструктажа!!!
PM MAIL ICQ   Вверх
skyboy
Дата 23.12.2007, 21:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


неОпытный
****


Профиль
Группа: Модератор
Сообщений: 9820
Регистрация: 18.5.2006
Где: Днепропетровск

Репутация: 14
Всего: 260



Цитата(Цербер @  23.12.2007,  20:28 Найти цитируемый пост)

ну как вы поняли 2 таблицы, в одной логин и пас, в другой инфа всякая.

об одном и том же человеке?
если да - то почему все это не в одной таблице?!
Цитата(Цербер @  23.12.2007,  20:28 Найти цитируемый пост)
ссылку на статью о связывание таблиц

JOIN(по-английски)
JOIN(по-русски)
Цитата(Цербер @  23.12.2007,  20:28 Найти цитируемый пост)
ссылку на статью о связывание таблиц в мускуле

статья мануала MySQL(по-английски)
PM MAIL   Вверх
gta4kv
Дата 23.12.2007, 22:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Walking around mad.
***


Профиль
Группа: Завсегдатай
Сообщений: 1868
Регистрация: 25.7.2006

Репутация: 4
Всего: 91



Имхо, запрос для выбора тогда должен выглядить так:

Код

select * from table1 f1 join table2 f2 where f1.id = "{$id}" and f1.id = f2.id



+1 к мысли skyboy, почему бы не сделать это в одну таблицу? Вроде бы НФ* не нарушает. 


*Нормальная форма

Это сообщение отредактировал(а) gta4kv - 23.12.2007, 23:13
PM MAIL   Вверх
Цербер
Дата 23.12.2007, 22:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 333
Регистрация: 21.11.2007

Репутация: нет
Всего: 1



Цитата

об одном и том же человеке?
если да - то почему все это не в одной таблице?!

да я тоже так думаю но не я эти таблицы делал а переделывать в лом уже около 1000 юзеров тем.
спасибо за ссылки почитаю обязательно!
если есть исчо ссылки у кого нить не жалейте=)
PM MAIL ICQ   Вверх
skyboy
Дата 23.12.2007, 22:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


неОпытный
****


Профиль
Группа: Модератор
Сообщений: 9820
Регистрация: 18.5.2006
Где: Днепропетровск

Репутация: 14
Всего: 260



Цитата(Цербер @  23.12.2007,  21:19 Найти цитируемый пост)
но не я эти таблицы делал а переделывать в лом

ну-ну. вот заимеешь проблем - поздно будет.
вот смотри, у тебя id в обоих таблицах - автоинкрементное поле? если да, то представь, что в результате ошибки при вставке в одну таблицу запись вставится, а в другую - нет. А транзакций, как мне кажется, у тебя нету. значит, для всех последующих пар записей, вставляемых одновременно, id будут различаться и ты уже не соберешь до кучи информацию о людях - у тебя данных будут выбираться о разных людях.
если же у тебя автоинкрементным поле является только в одной таблице, то разве не странно вставляться запись, получаться её id и вставлять в другую таблицу запись с этим id, когда такой схемы можно было бы избежать?!
Цитата(Цербер @  23.12.2007,  21:19 Найти цитируемый пост)
уже около 1000 юзеров тем

причем тут количество записей?! изменить структуру одной таблицы - один запрос. перебросить связанные данные из второй таблицы в добалвенные, но пока пустые поля первой таблицы - ещё один запрос. итого - два SQL запроса. СУБД все сделает за тебя.
Ну, и изменить запрос на выборку. Впрочем, раз ты ещё только спрашивал, как таблицы связывать, то, видимо, никакой запрос на выборку данных у тебя не используется. Правда?
Впрочем, если хочешь проблем - и дальше оправдывай бездеятельность фразой "переделывать влом".

Добавлено через 4 минуты и 35 секунд
Цитата(gta4kv @  23.12.2007,  21:04 Найти цитируемый пост)
Вроде бы НО* не нарушает.

так как это все аттрибуты одной сущности, то согласно практически всем НФ поля и должны к одной таблице относиться. Исключения возможны только для НФ выше 2, при условии, что поля могут быть незаполнены(NULL) - тогда их надо бы в отдельную таблицу. Но в данном случае, мне кажется, текстовые поля все равно будут не NULL, а просто пустой строкой. В таком случае, должно всем НФ соотвествовать smile
Впрочем, НФ - это не более, чем рекомендация, являющаяся лучшим решением в большинстве случаев. 
PM MAIL   Вверх
gta4kv
Дата 23.12.2007, 23:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Walking around mad.
***


Профиль
Группа: Завсегдатай
Сообщений: 1868
Регистрация: 25.7.2006

Репутация: 4
Всего: 91



Цитата(skyboy @ 23.12.2007,  22:29)
так как это все аттрибуты одной сущности, то согласно практически всем НФ поля и должны к одной таблице относиться. Исключения возможны только для НФ выше 2, при условии, что поля могут быть незаполнены(NULL) - тогда их надо бы в отдельную таблицу. Но в данном случае, мне кажется, текстовые поля все равно будут не NULL, а просто пустой строкой. В таком случае, должно всем НФ соотвествовать smile

Хм.. Я что-то такого прям не помню. Хотя я их и не зубрил особо. ^_^

Цитата

Впрочем, НФ - это не более, чем рекомендация, являющаяся лучшим решением в большинстве случаев.


Может и рекомендация, но еслибы ее придерживались было бы гораздо проще всем жить.

Вот как заглянешь в структуру базы какого нибудь новичка. Этож [censored]. 

 ! 
skyboy
Обходимся без мата. Я не аввтоцензор, чтоб ещё и мат вырезать.


Это сообщение отредактировал(а) skyboy - 23.12.2007, 23:53
PM MAIL   Вверх
Цербер
Дата 23.12.2007, 23:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 333
Регистрация: 21.11.2007

Репутация: нет
Всего: 1



skyboy 
спасибо, вразумил. 
лучше я ща помучаюсь и перенесу все логины и пасы в одну таблицу с инфой, чем потом буду мучаться.
Цитата

изменить структуру одной таблицы - один запрос. перебросить связанные данные из второй таблицы в добалвенные, но пока пустые поля первой таблицы - ещё один запрос. итого - два SQL запроса.

ну как структуру изменить таблицы я понял - добавить 2 поля, а как одним запросом перенести все логины и пароли в другую таблицу да и ещё одним запросом?поведай об этом гуру=)
а то придётся в ручную через UPDATE =)

Цитата

Впрочем, НФ - это не более, чем рекомендация, являющаяся лучшим решением в большинстве случаев. 

а можете объяснить что такое НФ?

Это сообщение отредактировал(а) Цербер - 23.12.2007, 23:27
PM MAIL ICQ   Вверх
Ответ в темуСоздание новой темы Создание опроса
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | PHP: Базы Данных | Следующая тема »


 




[ Время генерации скрипта: 0.0580 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.