URL: https://www.opennet.me/cgi-bin/openforum/vsluhboard.cgi
Форум: vsluhforumID9
Нить номер: 9687
[ Назад ]

Исходное сообщение
"Как приджоинить таблицы"

Отправлено core , 01-Июн-13 11:36 
Здравствуйте. Есть вот такая структура: Таблица categories в ней есть поле cat_id(возьмем к примеру 18) которое соответствует другой таблице с название subcategory_18. Сейчас логика выборки из этих таблиц полностью на уровне пхп, но это не очень эффективно. Могу ли я делать джоин таких таблиц? И если да то как?

Содержание

Сообщения в этом обсуждении
"Как приджоинить таблицы"
Отправлено PavelR , 01-Июн-13 12:17 
> Здравствуйте. Есть вот такая структура: Таблица categories в ней есть поле cat_id(возьмем
> к примеру 18) которое соответствует другой таблице с название subcategory_18. Сейчас
> логика выборки из этих таблиц полностью на уровне пхп, но это
> не очень эффективно. Могу ли я делать джоин таких таблиц? И
> если да то как?

так как обычно такие вопросы задают похапысты, ваяющие под мускул, то приведу пару ссылок:

http://dev.mysql.com/doc/refman/5.5/en/select.html и дальше по ссылкам, в частности
http://dev.mysql.com/doc/refman/5.5/en/join.html


"Как приджоинить таблицы"
Отправлено core , 03-Июн-13 09:21 
>> Здравствуйте. Есть вот такая структура: Таблица categories в ней есть поле cat_id(возьмем
>> к примеру 18) которое соответствует другой таблице с название subcategory_18. Сейчас
>> логика выборки из этих таблиц полностью на уровне пхп, но это
>> не очень эффективно. Могу ли я делать джоин таких таблиц? И
>> если да то как?
> так как обычно такие вопросы задают похапысты, ваяющие под мускул, то приведу
> пару ссылок:
> http://dev.mysql.com/doc/refman/5.5/en/select.html и дальше по ссылкам, в частности
> http://dev.mysql.com/doc/refman/5.5/en/join.html

Здравствуйте Павел, да совершенно верно php+mysql я был по этим ссылкам, тут нет подобных примеров. Как приклеить по ключу я знаю а вот как приклеить ключ к имени таблицы я не знаю и тут об этом ничего не сказано.


"Как приджоинить таблицы"
Отправлено name , 03-Июн-13 12:56 
> к примеру 18) которое соответствует другой таблице с название subcategory_18. Сейчас

ничего не понятно
у вас что 18 разных таблиц категорий?


"Как приджоинить таблицы"
Отправлено core , 03-Июн-13 18:41 
>> к примеру 18) которое соответствует другой таблице с название subcategory_18. Сейчас
> ничего не понятно
> у вас что 18 разных таблиц категорий?

Именно так.


"Как приджоинить таблицы"
Отправлено XAnder , 03-Июн-13 14:24 
> Здравствуйте. Есть вот такая структура: Таблица categories в ней есть поле cat_id(возьмем
> к примеру 18) которое соответствует другой таблице с название subcategory_18. Сейчас
> логика выборки из этих таблиц полностью на уровне пхп, но это
> не очень эффективно. Могу ли я делать джоин таких таблиц? И
> если да то как?

Вы хотите сджойнить две таблицы, но название одной из них на момент составления запроса неизвестно. Это название должно быть получено в ходе выполнения запроса. Я правильно понял мысль?

Если да, то средствами SQL так сделать нельзя, и, вероятно, у вас ошибка при проектировании БД.


"Как приджоинить таблицы"
Отправлено core , 03-Июн-13 18:41 
>> Здравствуйте. Есть вот такая структура: Таблица categories в ней есть поле cat_id(возьмем
>> к примеру 18) которое соответствует другой таблице с название subcategory_18. Сейчас
>> логика выборки из этих таблиц полностью на уровне пхп, но это
>> не очень эффективно. Могу ли я делать джоин таких таблиц? И
>> если да то как?
> Вы хотите сджойнить две таблицы, но название одной из них на момент
> составления запроса неизвестно. Это название должно быть получено в ходе выполнения
> запроса. Я правильно понял мысль?
> Если да, то средствами SQL так сделать нельзя, и, вероятно, у вас
> ошибка при проектировании БД.

Так и есть, все верно поняли. Эх, жаль, я был почти на 100% уверен что нельзя но теперь на все 100% спасибо всем.


"Как приджоинить таблицы"
Отправлено Mr. Mistoffelees , 05-Июн-13 19:29 
Привет,

>> Вы хотите сджойнить две таблицы, но название одной из них на момент
>> составления запроса неизвестно. Это название должно быть получено в ходе выполнения
>> запроса.

Теория говорит, что при поддержке вложенных селектах это можно составить - что-то вроде
SELECT ... JOIN (SELECT ...))

Будет ти это быстрее PHP (и вообще умеет ли мускул такое) не ручаюсь - если очень надо, попробуйте.

Хотя коллега, говоривший об ошибочном строение базы, конечно, прав.

WWell,



"Как приджоинить таблицы"
Отправлено DeadLoco , 05-Июн-13 21:51 
> Если да, то средствами SQL так сделать нельзя,

Да можно все, тоже мне - бином ньютона...

Делается процыдурка, принимающая на вход известные на момент исполнения названия таблиц, и выполняющая внутре себя PREPARE-EXECUTE-DEALLOCATE. Костыль монументальный, конечно, но, тем не менее, работать будет 100%. Как паллиатив при кривой архитектуре базы - приемлемо, но в следующей версии от этой байды надо будет избавляться любыми средствами.


"Как приджоинить таблицы"
Отправлено name , 06-Июн-13 19:49 
> Здравствуйте. Есть вот такая структура: Таблица categories в ней есть поле cat_id(возьмем
> к примеру 18) которое соответствует другой таблице с название subcategory_18. Сейчас
> логика выборки из этих таблиц полностью на уровне пхп, но это
> не очень эффективно. Могу ли я делать джоин таких таблиц? И
> если да то как?

вот так можно условием и подзапросом, но это вырвиглазно
делаете запрос
select
data --ваш столбец из основной таблицы
,--столбец с подзапросами
case  
when categories=1  then (select top 1 name from subcategory_1 where id=categories)
when categories=2  then (select top 1 name from subcategory_2 where id=categories)
when categories=3  then (select top 1 name from subcategory_3 where id=categories)
--и так стопицот раз
else 'wtf im doing here'
end

from [ваша_супер_пупер_мега_таблица]


"Как приджоинить таблицы"
Отправлено core , 12-Июн-13 11:00 
>[оверквотинг удален]
> data --ваш столбец из основной таблицы
> ,--столбец с подзапросами
> case
> when categories=1  then (select top 1 name from subcategory_1 where id=categories)
> when categories=2  then (select top 1 name from subcategory_2 where id=categories)
> when categories=3  then (select top 1 name from subcategory_3 where id=categories)
> --и так стопицот раз
> else 'wtf im doing here'
> end
> from [ваша_супер_пупер_мега_таблица]

Именно таким образом сейчас и есть)


"Как приджоинить таблицы"
Отправлено core , 12-Июн-13 11:00 
>[оверквотинг удален]
>> ,--столбец с подзапросами
>> case
>> when categories=1  then (select top 1 name from subcategory_1 where id=categories)
>> when categories=2  then (select top 1 name from subcategory_2 where id=categories)
>> when categories=3  then (select top 1 name from subcategory_3 where id=categories)
>> --и так стопицот раз
>> else 'wtf im doing here'
>> end
>> from [ваша_супер_пупер_мега_таблица]
> Именно таким образом сейчас и есть(вернее в том числе есть и скрипты с подобными запросами)