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

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

Вернуться   Форум программистов > Скриптовые языки программирования > PHP
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 17.04.2011, 12:28   #1
AlexanderGalkin
Пользователь
 
Регистрация: 17.04.2011
Сообщений: 11
По умолчанию Стоит ли объединять 2 таблицы в запросе если необходимо только одно значение из первой?

Нужен совет.

Есть 2 таблицы в базе данных:
1я содержит информцию пользователя, 2я - записи пользователя (например отправленные им сообщения).

Необходимо вывести список сообщений пользователя.
На выходе должен быть список сообщений пользователя после его имени (например "Иванов Иван: Привет. как дела?"). Имя соответственно берется из первой таблицы, сообщения из второй.

Пример первой таблицы
table_1
uid, user_name

второй
table_2
uid, msg_text

Вариант решения первый - 2 запроса:

SELECT user_name FROM table_1 WHERE uid=$userid

так находим имя пользователя и потм его используем для каждого найденного сообщения:

SELECT user_name FROM table_2 WHERE uid=$userid

И вариант 2й - запрос к обоим таблицам:

SELECT user_name, msg_text FROM table_1,table_2 WHERE table_1.uid=$userid AND table_1.uid=table_2.uid

Вопрос - какой вариант лучше? Просьба в двух слов написать почему.

Спасибо
AlexanderGalkin вне форума Ответить с цитированием
Старый 17.04.2011, 13:14   #2
Andkorol
Старожил
 
Регистрация: 31.05.2010
Сообщений: 3,301
По умолчанию

Цитата:
Сообщение от AlexanderGalkin Посмотреть сообщение
Вопрос - какой вариант лучше? Просьба в двух слов написать почему.
В данном конкретном случае(все сообщения одного пользователя) - более правильным является первый вариант(2 запроса):
например, у пользователя есть 25 сообщений - какой смысл все 25 раз запрашивать из table_1 одно и тоже имя для пользователя?(не говоря уж о машинных ресурсах).

Второй вариант подходит для ситуации, когда нужно выбрать, например, 25 последних сообщений. Т.е. когда пользователи будут(могут быть) разными - соответственно, неизбежно требуется имя пользователя для каждого конкретного сообщения.
Andkorol вне форума Ответить с цитированием
Старый 17.04.2011, 14:20   #3
Abuhamed
Форумчанин
 
Аватар для Abuhamed
 
Регистрация: 27.01.2010
Сообщений: 330
По умолчанию

AlexanderGalkin
Думаю что вариант 2 более правильный, но почему не создать одну таблицу:
Код:
|uid|user_name|msg_text|
Abuhamed вне форума Ответить с цитированием
Старый 17.04.2011, 18:05   #4
AlexanderGalkin
Пользователь
 
Регистрация: 17.04.2011
Сообщений: 11
По умолчанию

Andkorol, спасибо. Тоже склонялся к этому решению, т.к. возращаться всегда будет одно и то же имя.

Abuhamed, объединять думаю не стоит, так как это только пример. В реальности каждая из таблиц имеет около 20 колонок (первая - различные данные пользователя, вторая - подробности по сообщению - тема, текст сообщения, кто проголосовал за сообщение, когда было создано и т.д.)
AlexanderGalkin вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Присвоить нескольким переменным одно значение fezilk25 Общие вопросы Delphi 8 20.11.2010 21:57
как изменить только одно поле в БД. Делфи. FACE OFF Помощь студентам 0 24.09.2010 20:21
Группы символов, состоящие только из латинских букв, если первая буква группы входит в нее еще только оди Ela Помощь студентам 0 29.04.2010 13:41
Данные из двух полей исх. таблицы в одно поле сводной таблицы Strelec79 Microsoft Office Excel 2 02.08.2009 13:59
Всплывающая подсказка, если одно из значний меньше 0 kzld Microsoft Office Excel 6 22.07.2009 07:37