imho.ws
IMHO.WS  

Вернуться   IMHO.WS > Веб-мастеру > Веб-программирование
Опции темы
Старый 31.03.2004, 01:26     # 1
Psionic Vision
Full Member
 
Аватар для Psionic Vision
 
Регистрация: 05.02.2002
Адрес: Underground
Сообщения: 2 110

Psionic Vision Имеются все основания чтобы гордиться собойPsionic Vision Имеются все основания чтобы гордиться собойPsionic Vision Имеются все основания чтобы гордиться собойPsionic Vision Имеются все основания чтобы гордиться собойPsionic Vision Имеются все основания чтобы гордиться собойPsionic Vision Имеются все основания чтобы гордиться собойPsionic Vision Имеются все основания чтобы гордиться собойPsionic Vision Имеются все основания чтобы гордиться собойPsionic Vision Имеются все основания чтобы гордиться собойPsionic Vision Имеются все основания чтобы гордиться собойPsionic Vision Имеются все основания чтобы гордиться собой
Совмещение двух SQL query

Есть query:

PHP код:
$smilies=$DB_site->query("SELECT smilietext,smilieid,title,smiliepath,showid FROM smilie ORDER BY showid LIMIT ".($limitlower-1).",$perpage"); 
Сказано заменить на:

PHP код:
$smilies=$DB_site->query("SELECT smilietext,smilieid,smilie.title,smiliegroup.title AS catname,smiliepath,smiliecat FROM smilie LEFT JOIN smiliegroup ON smiliecat=smiliegroup.smiliegroupid ORDER by smilie.title LIMIT ".($limitlower-1).",$perpage"); 
Однако, мне нужно во второй вариант добавить элементы showid из первого. (для справки: пример накладки двух хаков)
Так вот, как грамотно это сделать?
Предположение:

PHP код:
$smilies=$DB_site->query("SELECT smilietext,smilieid,smilie.title,smiliegroup.title,showid AS catname,smiliepath,smiliecat FROM smilie LEFT JOIN smiliegroup ON smiliecat=smiliegroup.smiliegroupid ORDER BY showid LIMIT ".($limitlower-1).",$perpage"); 
Psionic Vision вне форума  
Старый 31.03.2004, 01:39     # 2
Hubbitus
мод
IMHO Кодер-200(6,7,8)
 
Регистрация: 29.03.2003
Адрес: Saint-Petersburg, Russia
Пол: Male
Сообщения: 2 734

Hubbitus Бог с наворотамиHubbitus Бог с наворотами
Hubbitus Бог с наворотамиHubbitus Бог с наворотамиHubbitus Бог с наворотамиHubbitus Бог с наворотамиHubbitus Бог с наворотамиHubbitus Бог с наворотамиHubbitus Бог с наворотамиHubbitus Бог с наворотамиHubbitus Бог с наворотамиHubbitus Бог с наворотамиHubbitus Бог с наворотамиHubbitus Бог с наворотами
Ну если не смущает изменение сортировки, то в принципе правильно все.
Разве что можно для верности добавить имя таблицы, т.е. вместо showid написать smilie.showid (так точнее, но не обязательно если во второй таблице нет поля с таким же именем)
__________________
Я делаю Линукс! Присоединяйтесь к свободным людям!

Связаться со мной всегда можно по джабберу: Hubbitus@jabber.ru
Pahan-Hubbitus.
Hubbitus вне форума  
Старый 31.03.2004, 01:55     # 3
Psionic Vision
Full Member
 
Аватар для Psionic Vision
 
Регистрация: 05.02.2002
Адрес: Underground
Сообщения: 2 110

Psionic Vision Имеются все основания чтобы гордиться собойPsionic Vision Имеются все основания чтобы гордиться собойPsionic Vision Имеются все основания чтобы гордиться собойPsionic Vision Имеются все основания чтобы гордиться собойPsionic Vision Имеются все основания чтобы гордиться собойPsionic Vision Имеются все основания чтобы гордиться собойPsionic Vision Имеются все основания чтобы гордиться собойPsionic Vision Имеются все основания чтобы гордиться собойPsionic Vision Имеются все основания чтобы гордиться собойPsionic Vision Имеются все основания чтобы гордиться собойPsionic Vision Имеются все основания чтобы гордиться собой
У так:

$smilies=$DB_site->query("SELECT smilietext,smilieid,smilie.title,smiliegroup.title,showid AS catname,smiliepath,smiliecat FROM smilie LEFT JOIN smiliegroup ON smiliecat=smiliegroup.smiliegroupid ORDER BY showid LIMIT ".($limitlower-1).",$perpage");

не сработало, а сработало так:

$smilies=$DB_site->query("SELECT smilietext,smilieid,smilie.title,showid,smiliegroup.title AS catname,smiliepath,smiliecat FROM smilie LEFT JOIN smiliegroup ON smiliecat=smiliegroup.smiliegroupid ORDER BY showid LIMIT ".($limitlower-1).",$perpage");

Наверно это потому, что AS относится к smiliegroup.title
Хотя мне не совсем понятно, как в данном случае работает AS

Последний раз редактировалось Neo; 31.03.2004 в 01:57.
Psionic Vision вне форума  
Старый 31.03.2004, 02:40     # 4
Hubbitus
мод
IMHO Кодер-200(6,7,8)
 
Регистрация: 29.03.2003
Адрес: Saint-Petersburg, Russia
Пол: Male
Сообщения: 2 734

Hubbitus Бог с наворотамиHubbitus Бог с наворотами
Hubbitus Бог с наворотамиHubbitus Бог с наворотамиHubbitus Бог с наворотамиHubbitus Бог с наворотамиHubbitus Бог с наворотамиHubbitus Бог с наворотамиHubbitus Бог с наворотамиHubbitus Бог с наворотамиHubbitus Бог с наворотамиHubbitus Бог с наворотамиHubbitus Бог с наворотамиHubbitus Бог с наворотами
Точно, точно... не заметил...
А AS работает просто как алиас имени, тоесть теперь вместо smiliegroup.title можно ссылаться просто catname вот и все.
__________________
Я делаю Линукс! Присоединяйтесь к свободным людям!

Связаться со мной всегда можно по джабберу: Hubbitus@jabber.ru
Pahan-Hubbitus.
Hubbitus вне форума  
Старый 31.03.2004, 03:36     # 5
Psionic Vision
Full Member
 
Аватар для Psionic Vision
 
Регистрация: 05.02.2002
Адрес: Underground
Сообщения: 2 110

Psionic Vision Имеются все основания чтобы гордиться собойPsionic Vision Имеются все основания чтобы гордиться собойPsionic Vision Имеются все основания чтобы гордиться собойPsionic Vision Имеются все основания чтобы гордиться собойPsionic Vision Имеются все основания чтобы гордиться собойPsionic Vision Имеются все основания чтобы гордиться собойPsionic Vision Имеются все основания чтобы гордиться собойPsionic Vision Имеются все основания чтобы гордиться собойPsionic Vision Имеются все основания чтобы гордиться собойPsionic Vision Имеются все основания чтобы гордиться собойPsionic Vision Имеются все основания чтобы гордиться собой
Hubbitus
То есть, берется таблица smilie и в нее "вирутально" вставляются линии из smiliegroup так что получается вместо

SELECT smilietext,smilieid,smilie.title,showid,smiliegroup.title AS catname,smiliepath,smiliecat

вот это

SELECT smilietext,smilieid,smilie.title,showid,catname,smiliepath,smiliecat

т.е. оно вроде как воспринимается как одна таблица, так?
Psionic Vision вне форума  
Старый 31.03.2004, 08:03     # 6
is_absent
::VIP::
 
Аватар для is_absent
 
Регистрация: 27.01.2004
Адрес: Россия. Барнаул
Пол: Male
Сообщения: 417

is_absent Молодецis_absent Молодецis_absent Молодец
Neo
Нет, конструкция "field_name as alias" нужна не более чем для удобства разработчика. Эта конструкции "переименовывает" поле field_name в alias в конечной таблице... Этот альяс можно использовать, если я не ошибаюсь, только в операторе ORDER BY, поскольку только он выполняется после оператора SELECT. запрос типа "SELECT smilietext,smilieid,smilie.title,showid,catname,smiliepath,smiliecat" работать не будет, по причине отсутствия поля в табличке
Все запросы которые ты написал, работоспособные другое дело, что они возвращают не то, что ты ожидал
__________________
Nunc est bibendum
is_absent вне форума  
Старый 31.03.2004, 15:57     # 7
Hubbitus
мод
IMHO Кодер-200(6,7,8)
 
Регистрация: 29.03.2003
Адрес: Saint-Petersburg, Russia
Пол: Male
Сообщения: 2 734

Hubbitus Бог с наворотамиHubbitus Бог с наворотами
Hubbitus Бог с наворотамиHubbitus Бог с наворотамиHubbitus Бог с наворотамиHubbitus Бог с наворотамиHubbitus Бог с наворотамиHubbitus Бог с наворотамиHubbitus Бог с наворотамиHubbitus Бог с наворотамиHubbitus Бог с наворотамиHubbitus Бог с наворотамиHubbitus Бог с наворотамиHubbitus Бог с наворотами
2 Neo в принципе правильно написал @_is_absent , но есть некоторые замечания:
AS не вставляет линии из одной таблицы в другую, как ты выразился... Приблизительно это делает конструкция LEFT JOIN во втором твоем коде.
Имя, заданное через AS можно использовать не только в операторе GROUP BY, а также в условиях отбора (WHERE), ORDER BY, как новые вычисляемые значения (если это команда UPDATE, а не SELECT), в некоторых других местах.... И еще самое главное, в PHP, разбирая полученные из БД данные и используя ассоциативный массив для этого ключом в массиве тоже будет это имя.

Цитата:
@_is_absent:
апрос типа "SELECT smilietext,smilieid,smilie.title,showid,catname,smiliepath,smiliecat" работать не будет, по причине отсутствия поля в табличке
Оператор AS задает имя только на текущюю транзакцию БД, тоесть если используются транзакционные таблицы и журнал транзакций включен то поидее (сам я не пробовал) такой запрос в пределах одной транзакции вполне валиден!
__________________
Я делаю Линукс! Присоединяйтесь к свободным людям!

Связаться со мной всегда можно по джабберу: Hubbitus@jabber.ru
Pahan-Hubbitus.
Hubbitus вне форума  
Старый 31.03.2004, 16:20     # 8
is_absent
::VIP::
 
Аватар для is_absent
 
Регистрация: 27.01.2004
Адрес: Россия. Барнаул
Пол: Male
Сообщения: 417

is_absent Молодецis_absent Молодецis_absent Молодец
Hubbitus
Цитата:
Оператор AS задает имя только на текущюю транзакцию БД, тоесть если используются транзакционные таблицы и журнал транзакций включен то поидее (сам я не пробовал) такой запрос в пределах одной транзакции вполне валиден!
ну... так делать из известных мне СУБД умеет только Оракл.

Тут речь идет о MySQL. и он не позволяет вставлять альясы в where. а вот в group by и having -- пожалуйста. Дело в том, что MySQL (да и многие другие СУБД) обрабатывают запрос в порядке from,where,select,group by,having,order by[, limit]. следовательно, как я уже говорил, СУБД просто не знает альяса, который ты написал в select, когда выполняется разбор where и from.
__________________
Nunc est bibendum
is_absent вне форума  
Старый 31.03.2004, 17:45     # 9
Hubbitus
мод
IMHO Кодер-200(6,7,8)
 
Регистрация: 29.03.2003
Адрес: Saint-Petersburg, Russia
Пол: Male
Сообщения: 2 734

Hubbitus Бог с наворотамиHubbitus Бог с наворотами
Hubbitus Бог с наворотамиHubbitus Бог с наворотамиHubbitus Бог с наворотамиHubbitus Бог с наворотамиHubbitus Бог с наворотамиHubbitus Бог с наворотамиHubbitus Бог с наворотамиHubbitus Бог с наворотамиHubbitus Бог с наворотамиHubbitus Бог с наворотамиHubbitus Бог с наворотамиHubbitus Бог с наворотами
Цитата:
@_is_absent:
ну... так делать из известных мне СУБД умеет только Оракл.
Неправда!!! Многие умеют! И в том числе MySQL (я не забыл что о ней идет речь) с таблицами InnoDB (может быть еще с какими-то может)!!!!!

Цитата:
@_is_absent:
Тут речь идет о MySQL. и он не позволяет вставлять альясы в where
Да, вот с этим согласен, погорячился...

А с остальным я и не спорил, только хотел подчеркнуть что не только в ORDER BY (как у тебя было указано в первом посте). А также отметил про некоторое удобство работы с AS в PHP.
__________________
Я делаю Линукс! Присоединяйтесь к свободным людям!

Связаться со мной всегда можно по джабберу: Hubbitus@jabber.ru
Pahan-Hubbitus.
Hubbitus вне форума  
Старый 01.04.2004, 05:13     # 10
Psionic Vision
Full Member
 
Аватар для Psionic Vision
 
Регистрация: 05.02.2002
Адрес: Underground
Сообщения: 2 110

Psionic Vision Имеются все основания чтобы гордиться собойPsionic Vision Имеются все основания чтобы гордиться собойPsionic Vision Имеются все основания чтобы гордиться собойPsionic Vision Имеются все основания чтобы гордиться собойPsionic Vision Имеются все основания чтобы гордиться собойPsionic Vision Имеются все основания чтобы гордиться собойPsionic Vision Имеются все основания чтобы гордиться собойPsionic Vision Имеются все основания чтобы гордиться собойPsionic Vision Имеются все основания чтобы гордиться собойPsionic Vision Имеются все основания чтобы гордиться собойPsionic Vision Имеются все основания чтобы гордиться собой
Понятно, спасибо.
А где можно поподробней почитать про LEFT JOIN?
Если я все правильно понял, то здесь:

"SELECT smilie,smilieid AS num FROM smilies ORDER BY num"

будет группировка по smilid, так?
Psionic Vision вне форума  
Старый 01.04.2004, 06:05     # 11
is_absent
::VIP::
 
Аватар для is_absent
 
Регистрация: 27.01.2004
Адрес: Россия. Барнаул
Пол: Male
Сообщения: 417

is_absent Молодецis_absent Молодецis_absent Молодец
Neo
Цитата:
А где можно поподробней почитать про LEFT JOIN?
Да в родной документации. или в русском ее переводе на www.mysql.ru
Цитата:
"SELECT smilie,smilieid AS num FROM smilies ORDER BY num"
Нет. Если ты не пишешь group by, группировка не происходит. order by просто сортирует записи.
__________________
Nunc est bibendum
is_absent вне форума  
Старый 01.04.2004, 06:38     # 12
Psionic Vision
Full Member
 
Аватар для Psionic Vision
 
Регистрация: 05.02.2002
Адрес: Underground
Сообщения: 2 110

Psionic Vision Имеются все основания чтобы гордиться собойPsionic Vision Имеются все основания чтобы гордиться собойPsionic Vision Имеются все основания чтобы гордиться собойPsionic Vision Имеются все основания чтобы гордиться собойPsionic Vision Имеются все основания чтобы гордиться собойPsionic Vision Имеются все основания чтобы гордиться собойPsionic Vision Имеются все основания чтобы гордиться собойPsionic Vision Имеются все основания чтобы гордиться собойPsionic Vision Имеются все основания чтобы гордиться собойPsionic Vision Имеются все основания чтобы гордиться собойPsionic Vision Имеются все основания чтобы гордиться собой
@_is_absent
ну, я оговорился. я имел ввиду сортировку. а что такое группировка?
пойду читать документацию...
Psionic Vision вне форума  
Старый 01.04.2004, 07:19     # 13
is_absent
::VIP::
 
Аватар для is_absent
 
Регистрация: 27.01.2004
Адрес: Россия. Барнаул
Пол: Male
Сообщения: 417

is_absent Молодецis_absent Молодецis_absent Молодец
Neo
Цитата:
а что такое группировка?
попробую объяснить. в общем ты указываешь поля, по которым будет делаться группировка, и СУБД создает группы из уникальных значений этих полей...
__________________
Nunc est bibendum
is_absent вне форума  
Старый 03.04.2004, 02:18     # 14
Psionic Vision
Full Member
 
Аватар для Psionic Vision
 
Регистрация: 05.02.2002
Адрес: Underground
Сообщения: 2 110

Psionic Vision Имеются все основания чтобы гордиться собойPsionic Vision Имеются все основания чтобы гордиться собойPsionic Vision Имеются все основания чтобы гордиться собойPsionic Vision Имеются все основания чтобы гордиться собойPsionic Vision Имеются все основания чтобы гордиться собойPsionic Vision Имеются все основания чтобы гордиться собойPsionic Vision Имеются все основания чтобы гордиться собойPsionic Vision Имеются все основания чтобы гордиться собойPsionic Vision Имеются все основания чтобы гордиться собойPsionic Vision Имеются все основания чтобы гордиться собойPsionic Vision Имеются все основания чтобы гордиться собой
@_is_absent
Не очень понятно, но ладно... почитаю документацию - пойму... может быть
Psionic Vision вне форума  


Ваши права в разделе
Вы НЕ можете создавать новые темы
Вы не можете отвечать в темах.
Вы НЕ можете прикреплять вложения
Вы НЕ можете редактировать свои сообщения

BB код Вкл.
Смайлы Вкл.
[IMG] код Выкл.
HTML код Выкл.

Быстрый переход


Часовой пояс GMT +4, время: 14:18.




Powered by vBulletin® Version 3.8.5
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.