Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> jak wyrzucic dane z 7 tabel
mika1
post
Post #1





Grupa: Zarejestrowani
Postów: 10
Pomógł: 0
Dołączył: 15.05.2007

Ostrzeżenie: (0%)
-----


Witajcie,

mam baze o strukturze:
  1. CREATE TABLE `umowy` (
  2. `NrUmowy` varchar(10) NOT NULL,
  3. `OpisUmowy` varchar(255) NOT NULL,
  4. `Grupa` varchar(255) NOT NULL,
  5. `Typ` varchar(255) NOT NULL,
  6. `Dzial` varchar(255) NOT NULL,
  7. `Jednostka` varchar(255) DEFAULT NULL,
  8. `Nazwisko` varchar(100) NOT NULL,
  9. `Imie` varchar(50) NOT NULL,
  10. `Poczatek` varchar(12) NOT NULL,
  11. `Koniec` varchar(12) NOT NULL,
  12. `BiezacyRok` varchar(5) NOT NULL,
  13. PRIMARY KEY (`NrUmowy`));
  14.  
  15.  
  16. CREATE TABLE `zlecenie` (
  17. `Lp` bigint(20) UNSIGNED NOT NULL AUTO_INCREMENT,
  18. `NrUmowy` varchar(10) NOT NULL,
  19. `Rok` varchar(5) NOT NULL,
  20. `Wykonawca` varchar(255) NOT NULL,
  21. `DataFaktury` varchar(12) NOT NULL,
  22. `NrFaktury` varchar(20) NOT NULL,
  23. `Kwota` double NOT NULL,
  24. PRIMARY KEY (`Lp`));
  25.  
  26. CREATE TABLE `dzielo` (
  27. `Lp` bigint(20) UNSIGNED NOT NULL AUTO_INCREMENT,
  28. `NrUmowy` varchar(10) NOT NULL,
  29. `Rok` varchar(5) NOT NULL,
  30. `Nazwisko` varchar(100) NOT NULL,
  31. `Imie` varchar(50) NOT NULL,
  32. `Kwota` double NOT NULL,
  33. PRIMARY KEY (`Lp`));
  34.  
  35. CREATE TABLE `materialy` (
  36. `Lp` bigint(20) UNSIGNED NOT NULL AUTO_INCREMENT,
  37. `NrUmowy` varchar(10) NOT NULL,
  38. `Rok` varchar(5) NOT NULL,
  39. `Wykonawca` varchar(255) NOT NULL,
  40. `DataFaktury` varchar(12) NOT NULL,
  41. `NrFaktury` varchar(20) NOT NULL,
  42. `Kwota` double NOT NULL,
  43. PRIMARY KEY (`Lp`));
  44.  
  45. CREATE TABLE `ogolne` (
  46. `Lp` bigint(20) UNSIGNED NOT NULL AUTO_INCREMENT,
  47. `NrUmowy` varchar(10) NOT NULL,
  48. `Rok` varchar(5) NOT NULL,
  49. `Data` varchar(12) NOT NULL,
  50. `Kwota` double NOT NULL,
  51. PRIMARY KEY (`Lp`));
  52.  
  53. CREATE TABLE `prow` (
  54. `NrUmowy` varchar(10) NOT NULL,
  55. `Rok` varchar(6) NOT NULL,
  56. `Lacznie` double NOT NULL,
  57. `wyplaty` double NOT NULL,
  58. `zlecenie` double NOT NULL,
  59. `Materialy` double NOT NULL,
  60. `Uslugi` double NOT NULL,
  61. `dzielo` double NOT NULL,
  62. `koszty` double NOT NULL,
  63. `Ogolne` double NOT NULL, `VAT` double NOT NULL
  64. );
  65.  
  66. CREATE TABLE `blokady` (
  67. `Lp` bigint(20) UNSIGNED NOT NULL AUTO_INCREMENT,
  68. `NrUmowy` varchar(10) NOT NULL,
  69. `Rok` varchar(5) NOT NULL,
  70. `Data` varchar(12) NOT NULL,
  71. `Kwota` double NOT NULL,
  72. `Cel` varchar(100) NOT NULL,
  73. PRIMARY KEY (`Lp`));
  74.  
  75. CREATE TABLE `uslugi` (
  76. `Lp` bigint(20) UNSIGNED NOT NULL AUTO_INCREMENT,
  77. `NrUmowy` varchar(10) NOT NULL,
  78. `Rok` varchar(5) NOT NULL,
  79. `Wykonawca` varchar(255) NOT NULL,
  80. `DataFaktury` varchar(12) NOT NULL,
  81. `NrFaktury` varchar(20) NOT NULL,
  82. `Kwota` double NOT NULL,
  83. PRIMARY KEY (`Lp`));
  84.  
  85. CREATE TABLE `wyplaty` (
  86. `Lp` bigint(20) UNSIGNED NOT NULL AUTO_INCREMENT,
  87. `NrUmowy` varchar(10) NOT NULL,
  88. `Rok` varchar(5) NOT NULL,
  89. `Miesiac` varchar(15) NOT NULL,
  90. `Kwota` double NOT NULL,
  91. PRIMARY KEY (`Lp`));
  92.  
  93. CREATE TABLE `koszty` (
  94. `Lp` bigint(20) UNSIGNED NOT NULL AUTO_INCREMENT,
  95. `NrUmowy` varchar(10) NOT NULL,
  96. `Rok` varchar(5) NOT NULL,
  97. `Nazwisko` varchar(100) NOT NULL,
  98. `Imie` varchar(50) NOT NULL,
  99. `Kwota` double NOT NULL,
  100. PRIMARY KEY (`Lp`));
  101.  
  102. CREATE TABLE `grupy_umow` (
  103. `NazwaGrupy` varchar(255) NOT NULL,
  104. PRIMARY KEY (`NazwaGrupy`));
  105.  
  106.  
  107. CREATE TABLE `jednostki` (
  108. `NazwaJednostki` varchar(255) NOT NULL,
  109. `NazwaDzialu` varchar(255) NOT NULL,
  110. PRIMARY KEY (`NazwaJednostki`));
  111.  
  112.  
  113. CREATE TABLE `typy_umow` (
  114. `NazwaTypu` varchar(255) NOT NULL,
  115. `NazwaGrupy` varchar(255) NOT NULL,
  116. PRIMARY KEY (`NazwaTypu`));
  117.  
  118.  
  119. CREATE TABLE `Dzialy` (
  120. `NazwaDzialu` varchar(255) NOT NULL,
  121. PRIMARY KEY (`NazwaDzialu`));


i potrzebuje wydobyc dane z 7 tabel. Robie to tak:
  1. SELECT a.NrUmowy, a.Grupa, a.Dzial, a.Nazwisko, b.sum(Kwota), b.Rok, c.sum(Kwota), c.Rok, d.sum(Kwota), d.Rok, e.sum(Kwota), e.Rok, f.sum(Kwota), f.Rok, g.sum(Kwota), g.Rok, m.sum(Kwota), m.Rok
  2. FROM umowy a
  3. LEFT JOIN zlecenie b ON b.NrUmowy = a.NrUmowy
  4. LEFT JOIN dzielo c ON c.NrUmowy = a.NrUmowy
  5. LEFT JOIN materialy d ON d.NrUmowy = a.NrUmowy
  6. LEFT JOIN uslugi e ON e.NrUmowy = a.NrUmowy
  7. LEFT JOIN wyplaty f ON f.NrUmowy = a.NrUmowy
  8. LEFT JOIN koszty g ON g.NrUmowy = a.NrUmowy
  9. LEFT JOIN ogolne m ON m.NrUmowy = a.NrUmowy
  10. GROUP BY b.NrUmowy, b.Rok, c.NrUmowy, c.Rok, d.NrUmowy, d.Rok, e.NrUmowy, e.Rok, f.NrUmowy, f.Rok, g.NrUmowy, g.Rok, m.NrUmowy, m.Rok


Chciałabym dodać jeszcze 2 tabele. Ale na chwilę obecną wydajnościowo działa to tak że po 4 godzinach brak efektu. Co mogę zrobić żeby uzyskać na początek te dane?

Dzięki
B
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
kartin
post
Post #2





Grupa: Zarejestrowani
Postów: 246
Pomógł: 79
Dołączył: 25.05.2010

Ostrzeżenie: (0%)
-----


Należy zastosować indeksy na kluczach obcych.

Abstrahując od wydajności to należy stosować właściwe typy danych
  1. `Rok` varchar(5) NOT NULL,
  2. `Data` varchar(12) NOT NULL,
  3. `Kwota` double NOT NULL,
O ile przez rok i datą nic złego się nie stanie, to z kwotą w double możesz się przejechać.

  1. SELECT a.NrUmowy, a.Grupa, a.Dzial, a.Nazwisko, b.sum(Kwota), b.Rok, c.sum(Kwota), c.Rok, d.sum(Kwota), d.Rok, e.sum(Kwota), e.Rok, f.sum(Kwota), f.Rok, g.sum(Kwota), g.Rok, m.sum(Kwota), m.Rok
  2. ...
  3. GROUP BY b.NrUmowy, b.Rok, c.NrUmowy, c.Rok, d.NrUmowy, d.Rok, e.NrUmowy, e.Rok, f.NrUmowy, f.Rok, g.NrUmowy, g.Rok, m.NrUmowy, m.Rok
Powinno się grupować po wszystkich kolumnach w których nie są użyte funkcje agregujące. To, że MySQL nie wymusza tego to już inna bajka.

  1. CREATE TABLE `grupy_umow` (
  2. `NazwaGrupy` varchar(255) NOT NULL,
  3. PRIMARY KEY (`NazwaGrupy`));
  4.  
  5. CREATE TABLE `Dzialy` (
  6. `NazwaDzialu` varchar(255) NOT NULL,
  7. PRIMARY KEY (`NazwaDzialu`));
Czemu to ma służyć?

Ten post edytował kartin 15.09.2015, 10:55:14
Go to the top of the page
+Quote Post

Posty w temacie


Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 8.10.2025 - 23:06