Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Вебмастеру (http://forum.oszone.net/forumdisplay.php?f=22)
-   -   sql запрос (http://forum.oszone.net/showthread.php?t=76300)

E-mail 17-12-2006 03:24 525688

sql запрос
 
есть три таблицы:

===
site:
===
id
name
type_id //тип сайта

===
page
===
site_id
name
type_id //тип страницы

===
type
===
id
name


как одним запросом показать ВСЕ содержимое из трех таблиц, где site.id='1' mysql?

vadimiron 17-12-2006 03:27 525690

Цитата:

===
type
===
name
Здесь тоже ID есть?? или что это такое?

E-mail 17-12-2006 03:48 525696

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

vadimiron 17-12-2006 13:48 525778

Для меня это выглядит невозможным, потому что мы выбираем строку из БД, а для данной схемы таблиц придётся две строки из таблицы type превратить в одну и к тому же в одном запросе вывести.
Я бы посоветовал сделать два запроса или разбить таблицу на две: type_site, type_page

Если только какими нибудь JOIN-ами поиграться.....

E-mail 17-12-2006 15:17 525807

вопрос открыт..

Vlad Drakula 17-12-2006 16:48 525827

select *
from site, page, type as type1, type as type2
where
(site.id = page.site_id
and site.type_id = type1.id
and page.type_id = type2.id
)
and site.id='1'

vadimiron 17-12-2006 16:59 525834

Цитата:

type as type1, type as type2
всё время забываю, что так одну таблицу как 2 разные представить можно :(

E-mail 18-12-2006 22:22 526356

vadimiron,
Vlad Drakula я тое забыл вернее не там алиас создавал - идиот, но я зделал раньше:) и через inner outer join и left join

а как сделать одним запросом так, чтобы id и name из таблицы site не тащились во всех кортежах а присутствовали только в двух кортежах?
(в таблице page - 15 записей относящихся к 1 записи в таблице site)

Vlad Drakula 19-12-2006 17:12 526704

E-mail

"имя таблицы"."имя столюца" as "имя в выходной таблице", "имя таблицы"."имя столюца" as "имя в выходной таблице", "имя таблицы"."имя столюца" as "имя в выходной таблице" и т.д.

E-mail 21-12-2006 00:44 527327

непонятноVlad Drakula

Vlad Drakula 22-12-2006 01:38 527762

select page.id as page_id, type2.name as page_type
from site, page, type as type1, type as type2
where
(site.id = page.site_id
and site.type_id = type1.id
and page.type_id = type2.id
)
and site.id='1'

E-mail 26-12-2006 02:35 529137

у меня получается:

site1 aboutsite1 type1
site1 aboutsite1 type2
site1 aboutsite1 type3
site2 aboutsite2 type1
site2 aboutsite2 type2
site2 aboutsite2 type3
site3 aboutsite3 type1
site3 aboutsite3 type2
site3 aboutsite3 type3

а мне надо:

site1 aboutsite1 type1
_____________ type2
_____________ type3
site2 aboutsite2 type1
_____________ type2
_____________ type3
site3 aboutsite3 type1
_____________ type2
_____________ type3

как?

_ = NULL например

mar 26-12-2006 10:00 529208

E-mail
ну Вы же работаете в пределах реляционной СУБД. Так что пропущенных клеток в таблице быть не может. Вычищайте их уже вне СУБД. (на том же PHP)

E-mail 26-12-2006 19:40 529434

mar интересует как с помощью sql не тащить лишние данные.. например если уже есть такие данные то в следущей строке тащить поле со значением null

предварительно заменив повтор на null соответственно

mar 26-12-2006 21:13 529454

не получится (вернее можно попробовать извратиться, но, во-первых, скорей всего не для mysql, во-вторых, изврат сожрет больше ресурсов, чем ты сэкономишь)

Vlad Drakula 27-12-2006 15:18 529784

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

E-mail 29-12-2006 08:06 530330

интересует овчинка)

sen1983 29-12-2006 13:48 530452

E-mail
Можно выбрать результаты во временную таблицу:
site1 aboutsite1 type1
site1 aboutsite1 type2
site1 aboutsite1 type3
site2 aboutsite2 type1
site2 aboutsite2 type2
site2 aboutsite2 type3
site3 aboutsite3 type1
site3 aboutsite3 type2
site3 aboutsite3 type3

После этого сделать в ней модификации, которые приведут ее к виду
site1 aboutsite1 type1
_____________ type2
_____________ type3
site2 aboutsite2 type1
_____________ type2
_____________ type3
site3 aboutsite3 type1
_____________ type2
_____________ type3

после этого сделать Select по этой таблице... Это какойто изврат... Лучше запихнуть все это в хранимую процедуру. имя временной таблицы начинать с ##. (Я так понял что мы говорим про MS Sql)
PS: полностью согласен с Vlad Drakula

E-mail 30-12-2006 14:11 530739

нет, не нужно доп таблиц, не нужно mssql
нужно в mysql используя например подзапросы в одном запросе

vadimiron 30-12-2006 14:38 530744

Цитата:

site1 aboutsite1 type1
site1 aboutsite1 type2
site1 aboutsite1 type3
site2 aboutsite2 type1
site2 aboutsite2 type2
site2 aboutsite2 type3
site3 aboutsite3 type1
site3 aboutsite3 type2
site3 aboutsite3 type3

а мне надо:

site1 aboutsite1 type1
_____________ type2
_____________ type3
site2 aboutsite2 type1
_____________ type2
_____________ type3
site3 aboutsite3 type1
_____________ type2
_____________ type3
Я честно говоря не понимаю большой разницы.
Просто записывай site1 в переменную и итерируй: пока эта переменная равна site1, то и все type-ы принадлежат этому site1. Тоже самое для других site-ов

E-mail 30-12-2006 22:31 530835

vadimiron разница всегда есть:)

надо с помощью скул тем более он это позвояет и надо под mysql она тоже позволяет это


Время: 10:27.

Время: 10:27.
© OSzone.net 2001-