![]() |
sql запрос
есть три таблицы:
=== site: === id name type_id //тип сайта === page === site_id name type_id //тип страницы === type === id name как одним запросом показать ВСЕ содержимое из трех таблиц, где site.id='1' mysql? |
Цитата:
|
vadimiron
поправил, конечно там id поскольку каждая из двух таблиц связаны с третьей именно по нему |
Для меня это выглядит невозможным, потому что мы выбираем строку из БД, а для данной схемы таблиц придётся две строки из таблицы type превратить в одну и к тому же в одном запросе вывести.
Я бы посоветовал сделать два запроса или разбить таблицу на две: type_site, type_page Если только какими нибудь JOIN-ами поиграться..... |
вопрос открыт..
|
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,
Vlad Drakula я тое забыл вернее не там алиас создавал - идиот, но я зделал раньше:) и через inner outer join и left join а как сделать одним запросом так, чтобы id и name из таблицы site не тащились во всех кортежах а присутствовали только в двух кортежах? (в таблице page - 15 записей относящихся к 1 записи в таблице site) |
E-mail
"имя таблицы"."имя столюца" as "имя в выходной таблице", "имя таблицы"."имя столюца" as "имя в выходной таблице", "имя таблицы"."имя столюца" as "имя в выходной таблице" и т.д. |
непонятноVlad Drakula
|
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, во-вторых, изврат сожрет больше ресурсов, чем ты сэкономишь)
|
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 используя например подзапросы в одном запросе |
Цитата:
Просто записывай site1 в переменную и итерируй: пока эта переменная равна site1, то и все type-ы принадлежат этому site1. Тоже самое для других site-ов |
vadimiron разница всегда есть:)
надо с помощью скул тем более он это позвояет и надо под mysql она тоже позволяет это |
Время: 10:27. |
Время: 10:27.
© OSzone.net 2001-