|
|
|
join 1 большой или 2-х маленьких таблиц
|
|||
|---|---|---|---|
|
#18+
Проще говоря нужно создать таблицу, которая показывает спрос и предложение по каждому товару, также вывести строки где присутствует только спрос или только предложение, и товары по которым отсуствиет спрос и предложение Да? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.11.2016, 15:38 |
|
||
|
join 1 большой или 2-х маленьких таблиц
|
|||
|---|---|---|---|
|
#18+
saya812Это атрибут страны - то есть страна либо экспорта либо импорта. То есть у тебя есть сущность "Страна", имеющая атрибут "экс-им-портёр"... И экземпляры сущности "Швамбрания экспортёр" и "Швамбрания импортёр" - это две независимые страны, ибо две независимые записи в таблице экземпляров сущности "Страна". Верно? Что-то мне подсказывает, что ни разу. А коли так - то кто-то неправ, и должны быть таблицы Страна, ЭкспортёрИмпортёр, и связующая СтранаЭкспортёрИмпортёр, организующая между первыми двумя связь типа много-ко-много. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.11.2016, 15:43 |
|
||
|
join 1 большой или 2-х маленьких таблиц
|
|||
|---|---|---|---|
|
#18+
CosmagnettoА может страна и покупать и продавать один и тот же сыр? Может. CosmagnettoПроще говоря нужно создать таблицу, которая показывает спрос и предложение по каждому товару, также вывести строки где присутствует только спрос или только предложение, и товары по которым отсуствиет спрос и предложение Да? Да (неуверенно, усложнили вы как-то задачу, введя новую терминологию спроса и предложения) AkinaТо есть у тебя есть сущность "Страна", имеющая атрибут "экс-им-портёр"... И экземпляры сущности "Швамбрания экспортёр" и "Швамбрания импортёр" - это две независимые страны, ибо две независимые записи в таблице экземпляров сущности "Страна". Верно? Что-то мне подсказывает, что ни разу. А коли так - то кто-то неправ, и должны быть таблицы Страна, ЭкспортёрИмпортёр, и связующая СтранаЭкспортёрИмпортёр, организующая между первыми двумя связь типа много-ко-много. Мне кажется вы усложняете... До конца не понял подхода, но создание еще связи между "экспортер/импортер" и "страна" еще сильнее усложнит наш пример (еще дальше отодвинет от конечного решения). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.11.2016, 15:59 |
|
||
|
join 1 большой или 2-х маленьких таблиц
|
|||
|---|---|---|---|
|
#18+
AkinaТо есть у тебя есть сущность "Страна", имеющая атрибут "экс-им-портёр"... И экземпляры сущности "Швамбрания экспортёр" и "Швамбрания импортёр" - это две независимые страны, ибо две независимые записи в таблице экземпляров сущности "Страна". Верно? Что-то мне подсказывает, что ни разу. А коли так - то кто-то неправ, и должны быть таблицы Страна, ЭкспортёрИмпортёр, и связующая СтранаЭкспортёрИмпортёр, организующая между первыми двумя связь типа много-ко-много. Страна может являться как экспортером так и импортером. Я этот атрибут предложил пихать в промежуточную таблицу (таблицу связывающую СЫР и СТРАНУ). Ну а по сути - да это атрибут страны в определенных условиях. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.11.2016, 16:09 |
|
||
|
join 1 большой или 2-х маленьких таблиц
|
|||
|---|---|---|---|
|
#18+
Получилось ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.11.2016, 16:26 |
|
||
|
join 1 большой или 2-х маленьких таблиц
|
|||
|---|---|---|---|
|
#18+
saya812по сути - да это атрибут страны в определенных условияхНет. Это мультиатрибут. И потому много-ко-много. Более того - это мультиатрибут не страны, а пары Страна - Товар (запросто же может быть, что пармезан страна экспортирует, а чечил импортирует). Но если ты всё же делаешь это мультиатрибутом страны, и при этом хочешь уйти от промежуточной таблицы - сделай у Страны не один, а два атрибута. Первый - экспортёр (да/нет, true/false), второй, соответственно, импортёр. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.11.2016, 16:26 |
|
||
|
join 1 большой или 2-х маленьких таблиц
|
|||
|---|---|---|---|
|
#18+
AkinaНет. Это мультиатрибут. И потому много-ко-много. Более того - это мультиатрибут не страны, а пары Страна - Товар (запросто же может быть, что пармезан страна экспортирует, а чечил импортирует). Но если ты всё же делаешь это мультиатрибутом страны, и при этом хочешь уйти от промежуточной таблицы - сделай у Страны не один, а два атрибута. Первый - экспортёр (да/нет, true/false), второй, соответственно, импортёр. Погоди, вопрос не к справочнику страны. Akinaэто мультиатрибут не страны, а пары Страна - Товар Это абсолютно так. Но вопрос не в этом - мне надо соединить многое ко многим сыр и страны, в этих соединениях указать - чем является страна - импортером или экспортером. А дальше (основная цель) выборка всех сыров с колонками "страны экспорта", "страны импорта". И вот тут начальный вопрос - можно сделать 2 соединительные таблицы "страны экспорта" и "страны импорта", а можно одну, но большую - "страны", а в ней атрибут "экспорт/импорт". ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.11.2016, 16:42 |
|
||
|
join 1 большой или 2-х маленьких таблиц
|
|||
|---|---|---|---|
|
#18+
[quot Akina]saya812сделай у Страны не один, а два атрибута. Первый - экспортёр (да/нет, true/false), второй, соответственно, импортёр. нет смысла Тру - импортер, Фолс - экспортер, Null - ни то ни другое ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.11.2016, 16:45 |
|
||
|
join 1 большой или 2-х маленьких таблиц
|
|||
|---|---|---|---|
|
#18+
CosmagnettoТру - импортер, Фолс - экспортер, Null - ни то ни другоеА если и то, и другое? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.11.2016, 16:47 |
|
||
|
join 1 большой или 2-х маленьких таблиц
|
|||
|---|---|---|---|
|
#18+
две строки подряд ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.11.2016, 16:48 |
|
||
|
join 1 большой или 2-х маленьких таблиц
|
|||
|---|---|---|---|
|
#18+
saya812А дальше (основная цель) выборка всех сыров с колонками "страны экспорта", "страны импорта". И вот тут начальный вопрос - можно сделать 2 соединительные таблицы "страны экспорта" и "страны импорта", а можно одну, но большую - "страны", а в ней атрибут "экспорт/импорт".Ну это по сути же пивот, а в реализации, вероятно, GROUP BY + GROUP_CONCAT? Ну тогда проще по тексту использовать одну копию таблицы и условие в аргументе функции, а по производительности лучше два раздельных запроса и UNION ALL. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.11.2016, 16:51 |
|
||
|
join 1 большой или 2-х маленьких таблиц
|
|||
|---|---|---|---|
|
#18+
Cosmagnettoдве строки подрядЭто ты делаешь две страны из одной. О чём говорилось выше... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.11.2016, 16:51 |
|
||
|
join 1 большой или 2-х маленьких таблиц
|
|||
|---|---|---|---|
|
#18+
Чувствуется мне нужно копать в сторону нескольких связок (SELECT + INSERT IGNORE) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.11.2016, 16:51 |
|
||
|
join 1 большой или 2-х маленьких таблиц
|
|||
|---|---|---|---|
|
#18+
AkinaCosmagnettoдве строки подрядЭто ты делаешь две страны из одной. О чём говорилось выше... В промежуточной таблице - да. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.11.2016, 16:53 |
|
||
|
join 1 большой или 2-х маленьких таблиц
|
|||
|---|---|---|---|
|
#18+
saya812 , Базовую таблицу (в последнем случае "СЫР") перебирать придется всю, тупо в лоб, индексы тут не помогут, если только требуемое упорядочивание не совпадет с индексом) Связывающая (или развязывающая, вопрос терминологии) таблица может быть одна с дополнительным признаком, или их может быть несколько, для каждого признака своя. В любом случае для ускорения запроса на эту (эти) таблицу необходимо навесить индекс. Скорость поиска по индексу для большой и огромной таблиц примерно одинаковы, поэтому разделение таблиц на несколько для каждого признака на скорость не повлияет. Суммарное число записей в связывающих таблицах по признакам и в одной таблице с дополнительным полем тоже одинаковы. Небольшое увеличение объема данных в одной таблице (за счет дополнительного поля "признак") вполне компенсируется организацией и поддержкой нескольких однотипных таблиц, во всяком случае отдельного обсуждения не заслуживает. Включение в индекс общей таблицы несколько увеличит размер индексов по сравнению с индексами раздельных таблиц, но тоже не вижу в этом большой разницы. Очевидное преимущество одной таблицы - масштабируемость. Так, выпустили новую модель шкафа с тремя полками - и не придется переписывать ничего (ну, кроме разве что контроля номера полки при вводе данных). Выводы делать не буду ;-) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.11.2016, 16:54 |
|
||
|
join 1 большой или 2-х маленьких таблиц
|
|||
|---|---|---|---|
|
#18+
CosmagnettoВ промежуточной таблице - да.Ммм... что-то я теряю нить обсуждения... мне казалось, что копья ломаются именно из-за нежелания делать связующую таблицу. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.11.2016, 16:54 |
|
||
|
join 1 большой или 2-х маленьких таблиц
|
|||
|---|---|---|---|
|
#18+
Cygapb-007, Вроде все понятно, в рамках вопроса "что быстрее / лучше" ответ получил. А по сути запроса так делаю - на join-ах или как-то иначе лучше? AkinaМмм... что-то я теряю нить обсуждения... мне казалось, что копья ломаются именно из-за нежелания делать связующую таблицу. Нет, связывающую все равно придется) Я другого способа не вижу... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.11.2016, 17:06 |
|
||
|
join 1 большой или 2-х маленьких таблиц
|
|||
|---|---|---|---|
|
#18+
saya812по сути запроса так делаю - на join-ах или как-то иначе лучше? А как еще-то? SQL работает на JOINах, даже если это выглядит как декартово произведение, или как вложенный запрос Все равно требуется поиск в таблицах и объединение результатов Код: sql 1. 2. 3. 4. 5. 6. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.11.2016, 17:17 |
|
||
|
join 1 большой или 2-х маленьких таблиц
|
|||
|---|---|---|---|
|
#18+
ну, или для раздельных таблиц Код: sql 1. 2. 3. 4. 5. 6. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.11.2016, 17:20 |
|
||
|
join 1 большой или 2-х маленьких таблиц
|
|||
|---|---|---|---|
|
#18+
Cygapb-007, Так и делал... Спасибо всем за участие! Если есть еще идеи (варианты) пишите. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.11.2016, 17:43 |
|
||
|
join 1 большой или 2-х маленьких таблиц
|
|||
|---|---|---|---|
|
#18+
Cygapb-007saya812по сути запроса так делаю - на join-ах или как-то иначе лучше? А как еще-то? SQL работает на JOINах, даже если это выглядит как декартово произведение, или как вложенный запрос Все равно требуется поиск в таблицах и объединение результатов Код: sql 1. 2. 3. 4. 5. 6. Так это работает так, как нужно ТС? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.11.2016, 17:53 |
|
||
|
join 1 большой или 2-х маленьких таблиц
|
|||
|---|---|---|---|
|
#18+
... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.11.2016, 18:04 |
|
||
|
join 1 большой или 2-х маленьких таблиц
|
|||
|---|---|---|---|
|
#18+
CosmagnettoТак это работает так, как нужно ТС? Да, это работает. Но просто сейчас я переписываю код (этот писался года 3-4 назад) и задумался о его верности, в плане оптимизации - например подумал о возможности разделения на 2 разные таблицы - типа меньше строк быстрее работа... Но подумал мало-ли например 1 таблица кэшируется и второе ее подключение нечего не стоит. Или может вообще не туда копать стоит, как-то переписать иначе, без безумного кол-ва join-ов... Но пока, как я понимаю, такое решение самое оптимальное... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.11.2016, 19:50 |
|
||
|
|

start [/forum/topic.php?fid=47&msg=39349316&tid=1831194]: |
0ms |
get settings: |
9ms |
get forum list: |
18ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
163ms |
get topic data: |
10ms |
get forum data: |
2ms |
get page messages: |
75ms |
get tp. blocked users: |
2ms |
| others: | 218ms |
| total: | 503ms |

| 0 / 0 |
