Показать полную графическую версию : 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
===
type
===
name
Здесь тоже ID есть?? или что это такое?
vadimiron
поправил, конечно там id поскольку каждая из двух таблиц связаны с третьей именно по нему
vadimiron
17-12-2006, 13:48
Для меня это выглядит невозможным, потому что мы выбираем строку из БД, а для данной схемы таблиц придётся две строки из таблицы type превратить в одну и к тому же в одном запросе вывести.
Я бы посоветовал сделать два запроса или разбить таблицу на две: type_site, type_page
Если только какими нибудь JOIN-ами поиграться.....
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 разные представить можно :(
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 "имя в выходной таблице" и т.д.
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'
у меня получается:
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 например
E-mail
ну Вы же работаете в пределах реляционной СУБД. Так что пропущенных клеток в таблице быть не может. Вычищайте их уже вне СУБД. (на том же PHP)
mar интересует как с помощью sql не тащить лишние данные.. например если уже есть такие данные то в следущей строке тащить поле со значением null
предварительно заменив повтор на null соответственно
не получится (вернее можно попробовать извратиться, но, во-первых, скорей всего не для mysql, во-вторых, изврат сожрет больше ресурсов, чем ты сэкономишь)
Vlad Drakula
27-12-2006, 15:18
E-mail
такое можно, но овчинка выделки не стоит, вы потеряете на увеличении нагрузки на процессор больше чем сэкономити на уменьшении объема данных.
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
нет, не нужно доп таблиц, не нужно 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
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.