Модераторы: LSD
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> никак не могу понять зачем нужны псевдонимы? и почему без них нельзя? 
:(
    Опции темы
poiuyt1234
Дата 10.9.2008, 18:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Вот кусок из php кода и запрос к бд mysql:
Код
 $sql = "SELECT aa.forum_id, u.user_id, u.username 
        FROM " . AUTH_ACCESS_TABLE . " aa, " . USER_GROUP_TABLE . " ug, " . GROUPS_TABLE . " g, " . USERS_TABLE . " u
        WHERE aa.auth_mod = " . TRUE . " 
            AND g.group_single_user = 1 
            AND ug.group_id = aa.group_id 
            AND g.group_id = aa.group_id 
            AND u.user_id = ug.user_id 
        GROUP BY u.user_id, u.username, aa.forum_id 
        ORDER BY aa.forum_id, u.user_id"; 

Зачем здесь псевдонимы и где они определяются?


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


Yersinia pestis
****


Профиль
Группа: Завсегдатай
Сообщений: 8302
Регистрация: 7.11.2006
Где: მოსკოვი

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



aa, ug, g - а зачем - дык, для удобства. smile 


--------------------
There's nothing left but silent epitaphs.
PM MAIL WWW   Вверх
Akina
Дата 10.9.2008, 21:03 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Советчик
****


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

Репутация: 13
Всего: 454



Цитата(Данкинг @  10.9.2008,  20:46 Найти цитируемый пост)
дык, для удобства

Используют их чаще для удобства и укорочения кода - это верно. Но НУЖНЫ они для другого - если в запросе используется несколько копий одной таблицы, алиасы позволяют понять, из какой копии таблицы следует выбирать поле.


--------------------
 О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума.

PM MAIL WWW ICQ Jabber   Вверх
poiuyt1234
Дата 10.9.2008, 22:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Цитата

Но НУЖНЫ они для другого - если в запросе используется несколько копий одной таблицы, алиасы позволяют понять, из какой копии таблицы следует выбирать поле. 

Что значит копии таблицы? Таблица вроде одна.. 
PM MAIL   Вверх
Platon
Дата 11.9.2008, 07:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

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



Код

SELECT c1.value, c2.value, c1.value*c2.value FROM pifagor c1, pifagor c2


Добавлено через 6 минут и 44 секунды
Цитата(poiuyt1234 @  10.9.2008,  19:19 Найти цитируемый пост)
Зачем здесь псевдонимы и где они определяются?

Прикинь ты без алиасов пишешь, вот код:

Код

$sql = "SELECT " . AUTH_ACCESS_TABLE . ".forum_id, u.user_id, " . USERS_TABLE . ".username 
        FROM " . AUTH_ACCESS_TABLE . ", " . USER_GROUP_TABLE . ", " . GROUPS_TABLE . ", " . USERS_TABLE . "
        WHERE " . AUTH_ACCESS_TABLE . ".auth_mod = " . TRUE . " 
            AND " . GROUPS_TABLE . ".group_single_user = 1 
            AND " . USER_GROUP_TABLE . ".group_id = " . AUTH_ACCESS_TABLE . ".group_id 
            AND " . GROUPS_TABLE . ".group_id = aa.group_id 
            AND " . USERS_TABLE . ".user_id = " . USER_GROUP_TABLE . ".user_id 
        GROUP BY " . USERS_TABLE . ".user_id, " . USERS_TABLE . ".username, " . AUTH_ACCESS_TABLE . ".forum_id 
        ORDER BY " . AUTH_ACCESS_TABLE . ".forum_id, " . USERS_TABLE . ".user_id"; 


PM MAIL ICQ   Вверх
Akina
Дата 11.9.2008, 07:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Советчик
****


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

Репутация: 13
Всего: 454



Цитата(poiuyt1234 @  10.9.2008,  23:20 Найти цитируемый пост)
Что значит копии таблицы? Таблица вроде одна..  

Она может использоваться несколько раз. Например, у тебя... ну скажем таблица неких показаний. допустим, потребление электричества. ID, дата, значение. Надо получить расход за период. Что ты делаешь? Берешь две копии таблицы, ... ну в общем что-то вот такое (код неверный, только демонстрирует суть):
Код

select t1.data, (t1.value-t2.value) as diff
from table as t1, table as t2
where t1.data>t2.data 
group by t1.data
having (t1.data-t2.data) = min(t1.data-t2.data)

Как видишь, без алиасов было бы невозможно понять, в каком случае брать значения даты и расхода из первой копии, а в каком из второй.


--------------------
 О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума.

PM MAIL WWW ICQ Jabber   Вверх
Akella
Дата 11.9.2008, 08:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Творец
****


Профиль
Группа: Модератор
Сообщений: 18485
Регистрация: 14.5.2003
Где: Корусант

Репутация: 3
Всего: 329



Мало того, если выбираются поля с одинаковыми именами из разных таблиц, то псевдонимы тоже могут прийти на выручку:
Код

select a.id, b.id from a, b

PM MAIL   Вверх
Akina
Дата 11.9.2008, 08:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Советчик
****


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

Репутация: 13
Всего: 454



Цитата(Akella @  11.9.2008,  09:09 Найти цитируемый пост)
если выбираются поля с одинаковыми именами из разных таблиц, то псевдонимы тоже могут прийти на выручку:

Ну в данном случае правильная, не-сокращенная, запись, в формате таблица.поле - вполне достаточна для однозначной интерпретации, алиасов не требуется.


--------------------
 О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума.

PM MAIL WWW ICQ Jabber   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Общие вопросы по базам данных"
LSD
Zloxa

Данный форум предназначен для обсуждения вопросов о базах данных не попадающих под тематику других форумов:

  • вопросам по СУБД для которых нет отдельных подфорумов
  • вопросам которые затрагивают несколько разных СУБД (например проблема выбора)
  • инструменты для работы с СУБД
  • вопросы проектирования БД
  • теоретически вопросы о СУБД

Данный форум не предназначен для:

  • вопросов о поиске разлиных БД (если не понимаете чем БД отличается от СУБД то: а) вам не сюда; б) Google в помощь)
  • обсуждения проблем с доступом к СУБД из различных ЯП (для этого есть соответсвующие форумы по каждому ЯП)
  • обсуждения проблем с написание SQL запросов, для этого есть форум Составление SQL-запросов
  • просьб о написании курсовой, реферата и т.п., для этого есть Центр помощи или фриланс биржа
  • объявлений о найме специалистов, для этого есть раздел Объявления о найме специалистов

Если вы не соблюдаете эти правила, не удивляйтесь потом не найдя свою тему/сообщение. ;)


Полезные советы:

При написании сообщения постарайтесь дать теме максимально понятное название. В теме максимально подробно опишите проблему. Если применимо укажите: название базы данных и версии (MySQL 4.1, MS SQL Server 2000 и т.п.); используемых язык программирования; способа доступа (ADO, BDE и т.д.); сообщения об ошибках.

Для вставки кода используйте теги [code=sql] [/code].

Литературу по базам данных можно поискать здесь.

Действия модераторов можно обсудить здесь.


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, LSD, Zloxa.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | СУБД, общие вопросы | Следующая тема »


 




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


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

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