Войти

Показать полную графическую версию : sql запрос


Страниц : [1] 2

E-mail
17-12-2006, 03:24
есть три таблицы:

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

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

===
type
===
id
name


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

vadimiron
17-12-2006, 03:27
===
type
===
name

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

E-mail
17-12-2006, 03:48
vadimiron
поправил, конечно там id поскольку каждая из двух таблиц связаны с третьей именно по нему

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

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

E-mail
17-12-2006, 15:17
вопрос открыт..

Vlad Drakula
17-12-2006, 16:48
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
type as type1, type as type2
всё время забываю, что так одну таблицу как 2 разные представить можно :(

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

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

Vlad Drakula
19-12-2006, 17:12
E-mail

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

E-mail
21-12-2006, 00:44
непонятноVlad Drakula

Vlad Drakula
22-12-2006, 01:38
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
у меня получается:

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

E-mail
26-12-2006, 19:40
mar интересует как с помощью sql не тащить лишние данные.. например если уже есть такие данные то в следущей строке тащить поле со значением null

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

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

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

E-mail
29-12-2006, 08:06
интересует овчинка)

sen1983
29-12-2006, 13:48
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
нет, не нужно доп таблиц, не нужно mssql
нужно в mysql используя например подзапросы в одном запросе

vadimiron
30-12-2006, 14:38
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-ов




© OSzone.net 2001-2012