|
Страници по тази тема: 1 | 2 | (покажи всички)
Тема
|
Обединяване на таблици
|
|
Автор |
mousebg (непознат
) |
Публикувано | 01.04.08 11:42 |
|
Здравейте,
имам следният въпрос към вас с молба за помощ. Трябва да обединя множество таблици около 300 да кажем с по 3 реда всяка.При обединяването MySQL би трябвало да направи някъде около 3 на степен 300 комбинации.Първият въпрос ми е дали подобно нещо е реално да се извърши или ще забие компа?
Вторият ми въпрос е:Да кажем че успее да направи всичките комбинации на мен ще ми трябват само някои от тях.Ето един пример с 2 таблици като този принцип трябва да се отнася за комбинация от 300 например
Таблица 1 Таблица2
Ред Стоиност Ред Стоиност
1 ст"а" 1 ст"d"
2 ст"b" 2 ст"e"
3 ст"c" 3 ст"f "
Трябват ми комбинациите от следните редове/но пак казжам това да се отнася за всичките комбинации от 300 таблици/
Таблица 1 - ред1 комбиниран с ред 2 и 3 от Таблица 2
Таблица 1 - ред2 комбиниран с ред 1 и 3 от Таблица 2
Таблица 1 - ред3 комбиниран с ред 1 и 2 от Таблица 2
Таблица 2 - ред1 комбиниран с ред 2 и 3 от Таблица 1
Таблица 2 - ред2 комбиниран с ред 1 и 3 от Таблица 1
Таблица 2 - ред3 комбиниран с ред 1 и 2 от Таблица 1
Благодаря ви предварително за помоща и ще бъда благодарен ако дадете някакви идеи
Поздрави
Мишо
| |
|
select * from tabl1,tabl2 where tabl1.id != tabl2.id
select * from tabl2,tabl1 where tabl1.id != tabl2.id
Ако са 3 таблиците - ще имаш доста повече селекти, а where - ще нарастне доста:
select * from tabl1,tabl2,tabl3 where tabl1.id != tabl2.id and tabl1.id != tabl3.id and tabl2.id != tabl3.id
Според мен е по добре да си ги дръпнеш резултатите в array - за всяка таблица и след това да си ги комбинираш както ти е кеф.
Bеer? Mоre?
| |
|
Благодаря ти за бързият отговор. :) Само едно уточнение.Ако вкарам всички комбинации от 300 таблици в array в PHP нали пак ще трябва да описжам селекциите на отделните елементи на масива кое да ми покаже и кое не.От базата данни ще го варне като асоциативен масив. А и относно първият ми въпрос...предвид броя на комбинациите дето се получва 3 на степен 300...не би ли се получил проблем?
Благодаря отново
:)
| |
|
Разбира се че ще се получи - всякак ще се получи - и на асемблер да въртиш - пак ще е сложно.
Но пък може да видиш кога баш ще ти гръмне машината - в смисъл увеличаваш постепенно - 2,3,4,5,6,7 ... таблици, докато я успиш напълно .
Ако имаш масивите - аз бих го правил на C - би могъл да почнеш да генерираш комбинации докато си задръстиш хард диска.
2 на степен 32 - са някакви си жалки 4 милиарда - по един байт да е - станаха 4 гига.
Мисля че при около 20 таблици - ще окапеш - 3 на 20 е 3 милиарда.
Тоест ще ти трябва доста памет да знаеш
Bеer? Mоre?
| |
Тема
|
Re: Обединяване на таблици
[re: mousebg]
|
|
Автор |
mousebg (непознат
) |
Публикувано | 02.04.08 11:17 |
|
Ами как тогава да завъртя всичките комбинации така че да не забие машината.В масив и после да му дам да върти комбинациите.?Или ако имаш предвид някакъв друг алгоритъм ще се радвам да го споделиш :) ммога да го напиша на ПХП :)
| |
Тема
|
Re: Обединяване на таблици
[re: mousebg]
|
|
Автор |
wqw (АзСъмЖив) |
Публикувано | 02.04.08 13:11 |
|
Очевидно 6-те реда в примерния резултат не са 3^2! Я пак виж нещо факториелна сложност да не бъркаш.
Как точно комбинираш 3-та таблица, щото това което бирата е написал е зловещо.
cheers,
</wqw>
| |
Тема
|
Re: Обединяване на таблици
[re: wqw]
|
|
Автор |
mousebg (непознат
) |
Публикувано | 02.04.08 14:56 |
|
Значи при 2 таблици комбинациите които ми трябват са
Таблица 1 - ред1 комбиниран с ред 2 и 3 от Таблица 2
Таблица 1 - ред2 комбиниран с ред 1 и 3 от Таблица 2
Таблица 1 - ред3 комбиниран с ред 1 и 2 от Таблица 2
Таблица 2 - ред1 комбиниран с ред 2 и 3 от Таблица 1
Таблица 2 - ред2 комбиниран с ред 1 и 3 от Таблица 1
Таблица 2 - ред3 комбиниран с ред 1 и 2 от Таблица 1
Тоест тук от пълното комбиниране = 9 реда взимам само 6 в които дефакто редовете от едната таблица и втората не се повтарят
При три таблици трябва да са следните комбинации
Таблица 1 - ред1 комбиниран с ред 2 и 3 от Таблица 2
Таблица 1 - ред2 комбиниран с ред 1 и 3 от Таблица 2
Таблица 1 - ред3 комбиниран с ред 1 и 2 от Таблица 2
Таблица 1 - ред1 комбиниран с ред 2 и 3 от Таблица 3
Таблица 1 - ред2 комбиниран с ред 1 и 3 от Таблица 3
Таблица 1 - ред3 комбиниран с ред 1 и 2 от Таблица 3
Таблица 2 - ред1 комбиниран с ред 2 и 3 от Таблица 1
Таблица 2 - ред2 комбиниран с ред 1 и 3 от Таблица 1
Таблица 2 - ред3 комбиниран с ред 1 и 2 от Таблица 1
Таблица 2 - ред1 комбиниран с ред 2 и 3 от Таблица 3
Таблица 2 - ред2 комбиниран с ред 1 и 3 от Таблица 3
Таблица 2 - ред3 комбиниран с ред 1 и 2 от Таблица 3
Таблица 3 - ред1 комбиниран с ред 2 и 3 от Таблица 1
Таблица 3 - ред2 комбиниран с ред 1 и 3 от Таблица 1
Таблица 3 - ред3 комбиниран с ред 1 и 2 от Таблица 1
Таблица 3 - ред1 комбиниран с ред 2 и 3 от Таблица 2
Таблица 3 - ред2 комбиниран с ред 1 и 3 от Таблица 2
Таблица 3 - ред3 комбиниран с ред 1 и 2 от Таблица 2
тоест 3 таблици комбинациите мейду таблиците е 3!=6 и по 3 комбинации за всяка = 18 комбинации.
Плс ако имате идея как да реша този проблем моля споделете я
Отново много благодаря за помоща
| |
|
Не може ли да напишеш алгоритъм който комбинира всяка таблица с всяка (имам предвид една по една) и резултата да го инсъртваш в междинна таблица. Съответно ще слагаш някакво име за да знаеш това точно коя комбинация е. Така ще ползваш диска, отделен въпрос е дали и диска ще ти стигне за всички комбинации.
| |
|
Уфф - не мога да направя точна сметка, ама все ми е на акъла че твоята няма да я бъде - в смисъл няма достатъчно капацитет на земята та да запомниш резултатите.
Иначе - със селекти взимаш резултатите в 300 масива, които в същност са част от по голям масив.
И след това почваш да въртиш цикли като..... докато лагерите на вентилатора ти станат квадратни....
За опит - пробвай с 2,3 и т.н. таблици - като засичаш колко време отнема, особено като минеш 10 ...
С 2, 3, 4 - в същност ще тестваш да видиш дали правилно въртиш циклите
Bеer? Mоre?
| |
Тема
|
Re: Обединяване на таблици
[re: mousebg]
|
|
Автор |
wqw (АзСъмЖив) |
Публикувано | 03.04.08 17:57 |
|
-- DROP TABLE Table1, Table2, Table3, Table4, Table5
CREATE TABLE Table1(ID INT NOT NULL)
CREATE TABLE Table2(ID INT NOT NULL)
CREATE TABLE Table3(ID INT NOT NULL)
CREATE TABLE Table4(ID INT NOT NULL)
CREATE TABLE Table5(ID INT NOT NULL)
INSERT Table1
SELECT 1 UNION ALL
SELECT 2 UNION ALL
SELECT 3
INSERT Table2 SELECT ID FROM Table1
INSERT Table3 SELECT ID FROM Table1
INSERT Table4 SELECT ID FROM Table1
INSERT Table5 SELECT ID FROM Table1
SELECT a.Tbl1, a.ID1, b.Tbl2, b.ID2, b.ID3
FROM (
SELECT ID, 1 FROM Table1 UNION ALL
SELECT ID, 2 FROM Table2 UNION ALL
SELECT ID, 3 FROM Table3 UNION ALL
SELECT ID, 4 FROM Table4 UNION ALL
SELECT ID, 5 FROM Table5
) a(ID1, Tbl1)
JOIN (
SELECT a.ID, b.ID, 1 FROM Table1 a, Table1 b WHERE a.ID < b.ID UNION ALL
SELECT a.ID, b.ID, 2 FROM Table2 a, Table2 b WHERE a.ID < b.ID UNION ALL
SELECT a.ID, b.ID, 3 FROM Table3 a, Table3 b WHERE a.ID < b.ID UNION ALL
SELECT a.ID, b.ID, 4 FROM Table4 a, Table4 b WHERE a.ID < b.ID UNION ALL
SELECT a.ID, b.ID, 5 FROM Table5 a, Table5 b WHERE a.ID < b.ID
) b(ID2, ID3, Tbl2)
ON a.Tbl1 <> b.Tbl2 AND a.ID1 <> b.ID2 AND a.ID1 <> b.ID3
ORDER BY Tbl1, Tbl2, ID1
Резултат:
Tbl1 ID1 Tbl2 ID2 ID3
----------- ----------- ----------- ----------- -----------
1 1 2 2 3
1 2 2 1 3
1 3 2 1 2
1 1 3 2 3
1 2 3 1 3
1 3 3 1 2
1 1 4 2 3
1 2 4 1 3
1 3 4 1 2
1 1 5 2 3
1 2 5 1 3
1 3 5 1 2
2 1 1 2 3
2 2 1 1 3
2 3 1 1 2
2 1 3 2 3
2 2 3 1 3
2 3 3 1 2
2 1 4 2 3
2 2 4 1 3
2 3 4 1 2
2 1 5 2 3
2 2 5 1 3
2 3 5 1 2
3 1 1 2 3
3 2 1 1 3
3 3 1 1 2
3 1 2 2 3
3 2 2 1 3
3 3 2 1 2
3 1 4 2 3
3 2 4 1 3
3 3 4 1 2
3 1 5 2 3
3 2 5 1 3
3 3 5 1 2
4 1 1 2 3
4 2 1 1 3
4 3 1 1 2
4 1 2 2 3
4 2 2 1 3
4 3 2 1 2
4 1 3 2 3
4 2 3 1 3
4 3 3 1 2
4 1 5 2 3
4 2 5 1 3
4 3 5 1 2
5 1 1 2 3
5 2 1 1 3
5 3 1 1 2
5 1 2 2 3
5 2 2 1 3
5 3 2 1 2
5 1 3 2 3
5 2 3 1 3
5 3 3 1 2
5 1 4 2 3
5 2 4 1 3
5 3 4 1 2
(60 row(s) affected)
cheers,
</wqw>
| |
|
Страници по тази тема: 1 | 2 | (покажи всички)
|
|
|