Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [MySQL][PHP]Sumowanie wartości z kolumn
Forum PHP.pl > Forum > Przedszkole
Therminus
Mam w php zrobiona tabelkę, w której wiersze zawierają dane z tabel MySQL. Niektóre komórki to nie tylko proste pobranie danych z tabeli MySQL, ale efekt wykonywania działań na danych tabeli (dodawanie, dzielenie, mnożenie). Każdy wiersz to inna tabela. Wierszy (a więc i tabel MySQL) jest około 100.
Zachodzi potrzeba zsumowania wartości liczbowych z kilkunastu kolumn.
Jak to zrobić?
Lord
Cytat(Therminus @ 1.06.2016, 16:47:02 ) *
Mam w php zrobiona tabelkę, w której wiersze zawierają dane z tabel MySQL. Niektóre komórki to nie tylko proste pobranie danych z tabeli MySQL, ale efekt wykonywania działań na danych tabeli (dodawanie, dzielenie, mnożenie). Każdy wiersz to inna tabela. Wierszy (a więc i tabel MySQL) jest około 100.
Zachodzi potrzeba zsumowania wartości liczbowych z kilkunastu kolumn.
Jak to zrobić?

A możesz podać jak wygląda struktura tej tablicy? (print_r())

http://php.net/manual/en/function.array-sum.php
http://php.net/manual/en/function.array-map.php
http://stackoverflow.com/questions/1283872...array-array-sum
http://php.net/manual/en/function.array-column.php

to ci powinno pomóc. Ewentualnie jakiś foreach, ale to zależy jak te dane w tablicy rozmieszczone
Therminus
Cytat(Lord @ 1.06.2016, 21:38:27 ) *
A możesz podać jak wygląda struktura tej tablicy? (print_r())

Dzięki za zainteresowanie.
z linkami, które podałeś zapoznałem się wcześniej. Niestety, przykłady tam zawarte nie pasują do mojego problemu. Obawiam się, że popełniłem na samym początku błędy projektowe i teraz nie da sie prosto mojego problemu rozwiązać. Być może niepotrzebnie stworzyłem ponad setkę tabel. A może brak jakiejś zbiorczej tabeli. Może jakoś wspólnie coś ustalimy. Podaję niżej kawałek kodu wyświetlającego dwie pozycje.
  1. <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
  2. <?xml version="1.0" encoding="utf-8" ?>
  3. <html>
  4. <head>
  5. <link rel="Stylesheet" type="text/css" href="table.css" />
  6. <script type="text/javascript" src="table.js"></script>
  7. <meta http-equiv="Content-Type" content="text/html;charset=utf-8" >
  8. <title>Nieruchomości</title>
  9. </head>
  10. <body>
  11. <script LANGUAGE="JavaScript">
  12. <!--
  13. document.write("<INPUT TYPE=\"BUTTON\" VALUE=\"Strona Główna\" onClick=\"location='index.php'\">");
  14. // -->
  15. </SCRIPT><p>
  16.  
  17. <p>
  18. <table border="1" width="100%" cellspacing="0" cellpadding="0" bordercolorlight="#000000">
  19. <tr>
  20. <td width="100%" colspan="20" bgcolor="#C0C0C0">
  21. <p align="center"><b><font size="2">Nieruchomości </font></b></td>
  22. </tr>
  23. <tr>
  24. <td width="7" align="center" bgcolor="#E0E0E0"><font size="2">LP</font></td>
  25. <td width="12" align="center" bgcolor="#E0E0E0"><font size="2">Ulica</font></td>
  26. <td width="8" align="center" bgcolor="#E0E0E0"><font size="2">Nr budynku</font></td>
  27. <td width="10" align="center" bgcolor="#E0E0E0"><font size="2">Nr działki</font></td>
  28. <td width="10" align="center" bgcolor="#E0E0E0"><font size="2">Nr księgi wiecz.</font></td>
  29. <td width="10" align="center" bgcolor="#E0E0E0"><font size="2">Powierz. działki</font></td>
  30. <td width="11" align="center" bgcolor="#E0E0E0"><font size="2">Obręb</font></td>
  31. <td width="10" align="center" bgcolor="#E0E0E0"><font size="2">Uwagi</font></td>
  32. <td width="10" align="center" bgcolor="#E0E0E0"><font size="2">PU mieszk.</font></td>
  33. <td width="10" align="center" bgcolor="#E0E0E0"><font size="2">PU cz. przynal.</font></td>
  34. <td width="10" align="center" bgcolor="#E0E0E0"><font size="2">PU lok. użyt.</font></td>
  35. <td width="10" align="center" bgcolor="#E0E0E0"><font size="2">PU LU + M</font></td>
  36. <td width="10" align="center" bgcolor="#E0E0E0"><font size="2">PU mieszk. z pr. wł.</font></td>
  37. <td width="10" align="center" bgcolor="#E0E0E0"><font size="2">PU lu. z pr. wł.</font></td>
  38. <td width="10" align="center" bgcolor="#E0E0E0"><font size="2">PU przyn. z pr. wł.</font></td>
  39. <td width="10" align="center" bgcolor="#E0E0E0"><font size="2">PU mieszk. spółdz.</font></td>
  40. <td width="10" align="center" bgcolor="#E0E0E0"><font size="2">Udział OW w nieruch.</font></td>
  41. <td width="10" align="center" bgcolor="#E0E0E0"><font size="2">PGS mieszk.</font></td>
  42. <td width="10" align="center" bgcolor="#E0E0E0"><font size="2">PGS użytkowe</font></td>
  43. <td width="10" align="center" bgcolor="#E0E0E0"><font size="2">PGS garaże</font></td>
  44. </tr>
  45. <?php
  46. $sql = mysql_connect('localhost', 'admin', 'smg');
  47. mysql_select_db('nieruchomosci');
  48. $char = "SET CHARSET UTF8";
  49. mysql_query($char);
  50.  
  51. // broniewskiego_2-10 (br_210)
  52. $zapytanie1 = "SELECT * FROM `dzialki` WHERE `ID` LIKE '1'";
  53. $wykonaj1 = mysql_query ($zapytanie1);
  54. while($wiersz=mysql_fetch_array ($wykonaj1))
  55.  
  56. {
  57. $suma_br_210_1 = "SELECT SUM(Pow_Uzyt) as sum_br_210_1 FROM `broniewskiego_2-10` WHERE `Kategoria` LIKE 'M'";
  58. $suma_br_210_2 = "SELECT SUM(Pow_przynal_zalicz) as sum_br_210_2 FROM `broniewskiego_2-10`";
  59. $suma_br_210_3 = "SELECT SUM(Pow_Uzyt) as sum_br_210_3 FROM `broniewskiego_2-10` WHERE `Kategoria` LIKE 'LU%'";
  60. $suma_br_210_4 = "SELECT SUM(Pow_Uzyt) as sum_br_210_4 FROM `broniewskiego_2-10`";
  61. $suma_br_210_5 = "SELECT SUM(Pow_razem) as sum_br_210_5 FROM `broniewskiego_2-10`";
  62. $suma_br_210_6 = "SELECT SUM(Pow_Uzyt_IF) as sum_br_210_6 FROM `broniewskiego_2-10` WHERE `Kategoria` LIKE 'M'";
  63. $suma_br_210_7 = "SELECT SUM(Pow_Uzyt_IF) as sum_br_210_7 FROM `broniewskiego_2-10` WHERE `Kategoria` LIKE 'LU%'";
  64. $suma_br_210_8 = "SELECT SUM(Pow_Przynal_IF) as sum_br_210_8 FROM `broniewskiego_2-10`";
  65. $rozn_br_210_9 = "SELECT Coalesce(SUM(case when `Kategoria` LIKE 'M' then `Pow_Uzyt` end),0) - Coalesce(SUM(case when `Kategoria` LIKE 'M' then `Pow_Uzyt_IF` end),0) as roz_br_210_9 FROM `broniewskiego_2-10`";
  66. $ilor_br_210_10 = "SELECT (Coalesce(SUM(case when `Kategoria` LIKE 'M' then `Pow_Uzyt_IF` end),0) + Coalesce(SUM(case when `Kategoria` LIKE 'LU%' then `Pow_Uzyt_IF` end),0) + Coalesce(SUM(Pow_Przynal_IF),0)) / (Coalesce(SUM(case when `Kategoria` LIKE 'M' then `Pow_Uzyt` end),0) + Coalesce(SUM(Pow_przynal_zalicz),0) + Coalesce(SUM(case when `Kategoria` LIKE 'LU%' then `Pow_Uzyt` end),0)) as ilo_br_210_10 FROM `broniewskiego_2-10`";
  67.  
  68. $result_br_210_1 = @mysql_query($suma_br_210_1);
  69. $result_br_210_2 = @mysql_query($suma_br_210_2);
  70. $result_br_210_3 = @mysql_query($suma_br_210_3);
  71. $result_br_210_4 = @mysql_query($suma_br_210_4);
  72. $result_br_210_5 = @mysql_query($suma_br_210_5);
  73. $result_br_210_6 = @mysql_query($suma_br_210_6);
  74. $result_br_210_7 = @mysql_query($suma_br_210_7);
  75. $result_br_210_8 = @mysql_query($suma_br_210_8);
  76. $result_br_210_9 = @mysql_query($rozn_br_210_9);
  77. $result_br_210_10 = @mysql_query($ilor_br_210_10);
  78. $sum_1_br_210 = mysql_fetch_assoc($result_br_210_1);
  79. $sum_2_br_210 = mysql_fetch_assoc($result_br_210_2);
  80. $sum_3_br_210 = mysql_fetch_assoc($result_br_210_3);
  81. $sum_4_br_210 = mysql_fetch_assoc($result_br_210_4);
  82. $sum_5_br_210 = mysql_fetch_assoc($result_br_210_5);
  83. $sum_6_br_210 = mysql_fetch_assoc($result_br_210_6);
  84. $sum_7_br_210 = mysql_fetch_assoc($result_br_210_7);
  85. $sum_8_br_210 = mysql_fetch_assoc($result_br_210_8);
  86. $roz_9_br_210 = mysql_fetch_assoc($result_br_210_9);
  87. $ilo_10_br_210 = mysql_fetch_assoc($result_br_210_10);
  88.  
  89. $roz_11_br_210 = (1 - $ilo_10_br_210['ilo_br_210_10']);
  90. $pdz_12_br_210 = $wiersz['Pow_dzial'];
  91. $ilc_13_br_210 = ($pdz_12_br_210 * $roz_11_br_210);
  92.  
  93. echo '<tr>
  94. <td align="center">'.$wiersz['ID'].'</td>
  95. <td align="center">'.$wiersz['Ulica'].'</td>
  96. <td align="center">'.$wiersz['Klatka'].'</td>
  97. <td align="center">'.$wiersz['Nr_dzialki'].'</td>
  98. <td align="center">'.$wiersz['Nr_KW'].'</td>
  99. <td align="right">'.$wiersz['Pow_dzial'].'</td>
  100. <td align="center">'.$wiersz['Obreb'].'</td>
  101. <td align="center">'.$wiersz['Uwagi'].'</td>
  102. <td align="right">'.$sum_1_br_210['sum_br_210_1'].'</td>
  103. <td align="right">'.$sum_2_br_210['sum_br_210_2'].'</td>
  104. <td align="right">'.$sum_3_br_210['sum_br_210_3'].'</td>
  105. <td align="right">'.$sum_4_br_210['sum_br_210_4'].'</td>
  106. <td align="right">'.$sum_6_br_210['sum_br_210_6'].'</td>
  107. <td align="right">'.$sum_7_br_210['sum_br_210_7'].'</td>
  108. <td align="right">'.$sum_8_br_210['sum_br_210_8'].'</td>
  109. <td align="right">'.$roz_9_br_210['roz_br_210_9'].'</td>
  110. <td align="right">'.$ilo_10_br_210['ilo_br_210_10'].'</td>
  111. <td align="right">'.round ($ilc_13_br_210, 4).'</td>
  112. <td align="right"></td>
  113. <td align="right"></td>
  114. </tr>';
  115. }
  116.  
  117. mysql_close($sql);
  118.  
  119. ?>
  120.  
  121. </table>
  122. </body>
  123. </html>
Lord
  1. $suma_br_210_1 = "SELECT SUM(Pow_Uzyt) as sum_br_210_1 FROM `broniewskiego_2-10` WHERE `Kategoria` LIKE 'M'";
  2. $suma_br_210_2 = "SELECT SUM(Pow_przynal_zalicz) as sum_br_210_2 FROM `broniewskiego_2-10`";


tak nie mozesz tego zapisywać
powinieneś dać to do tablicy

  1. $suma_br_210[] = "SELECT SUM(Pow_Uzyt) as sum_br_210_1 FROM `broniewskiego_2-10` WHERE `Kategoria` LIKE 'M'";


dodanie ci do tablicy umożliwia ci skorzystania z wielu przydatnych funkcji i skrócić kod wielokrotnie

wydaje mi się, że jezeli masz wiele tabel i do każdej ulicy masz nowa tabele to jest to bład. Jezeli masz wiele tabel przechwujących taka sama strukture danych to powinines dodać to do jednej tabeli dodając jakies ID i wtedy masz dużo prostsze zapytania i sensowniejsza strukturę.

Ten kod

  1. $suma_br_210_1 = "SELECT SUM(Pow_Uzyt) as sum_br_210_1 FROM `broniewskiego_2-10` WHERE `Kategoria` LIKE 'M'";
  2. $suma_br_210_2 = "SELECT SUM(Pow_przynal_zalicz) as sum_br_210_2 FROM `broniewskiego_2-10`";
  3. $suma_br_210_3 = "SELECT SUM(Pow_Uzyt) as sum_br_210_3 FROM `broniewskiego_2-10` WHERE `Kategoria` LIKE 'LU%'";
  4. $suma_br_210_4 = "SELECT SUM(Pow_Uzyt) as sum_br_210_4 FROM `broniewskiego_2-10`";
  5. $suma_br_210_5 = "SELECT SUM(Pow_razem) as sum_br_210_5 FROM `broniewskiego_2-10`";
  6. $suma_br_210_6 = "SELECT SUM(Pow_Uzyt_IF) as sum_br_210_6 FROM `broniewskiego_2-10` WHERE `Kategoria` LIKE 'M'";
  7. $suma_br_210_7 = "SELECT SUM(Pow_Uzyt_IF) as sum_br_210_7 FROM `broniewskiego_2-10` WHERE `Kategoria` LIKE 'LU%'";
  8. $suma_br_210_8 = "SELECT SUM(Pow_Przynal_IF) as sum_br_210_8 FROM `broniewskiego_2-10`";
  9.  
  10. $result_br_210_1 = @mysql_query($suma_br_210_1);
  11. $result_br_210_2 = @mysql_query($suma_br_210_2);
  12. $result_br_210_3 = @mysql_query($suma_br_210_3);
  13. $result_br_210_4 = @mysql_query($suma_br_210_4);
  14. $result_br_210_5 = @mysql_query($suma_br_210_5);
  15. $result_br_210_6 = @mysql_query($suma_br_210_6);
  16. $result_br_210_7 = @mysql_query($suma_br_210_7);
  17. $result_br_210_8 = @mysql_query($suma_br_210_8);
  18.  
  19. $sum_1_br_210 = mysql_fetch_assoc($result_br_210_1);
  20. $sum_2_br_210 = mysql_fetch_assoc($result_br_210_2);
  21. $sum_3_br_210 = mysql_fetch_assoc($result_br_210_3);
  22. $sum_4_br_210 = mysql_fetch_assoc($result_br_210_4);
  23. $sum_5_br_210 = mysql_fetch_assoc($result_br_210_5);
  24. $sum_6_br_210 = mysql_fetch_assoc($result_br_210_6);
  25. $sum_7_br_210 = mysql_fetch_assoc($result_br_210_7);
  26. $sum_8_br_210 = mysql_fetch_assoc($result_br_210_8);



można skrócić

  1. $suma_br_210 = array();
  2. $suma_br_210[] = "SELECT SUM(Pow_Uzyt) as sum_br_210_1 FROM `broniewskiego_2-10` WHERE `Kategoria` LIKE 'M'";
  3. $suma_br_210[] = "SELECT SUM(Pow_przynal_zalicz) as sum_br_210_2 FROM `broniewskiego_2-10`";
  4. $suma_br_210[] = "SELECT SUM(Pow_Uzyt) as sum_br_210_3 FROM `broniewskiego_2-10` WHERE `Kategoria` LIKE 'LU%'";
  5. $suma_br_210[] = "SELECT SUM(Pow_Uzyt) as sum_br_210_4 FROM `broniewskiego_2-10`";
  6. $suma_br_210[] = "SELECT SUM(Pow_razem) as sum_br_210_5 FROM `broniewskiego_2-10`";
  7. $suma_br_210[] = "SELECT SUM(Pow_Uzyt_IF) as sum_br_210_6 FROM `broniewskiego_2-10` WHERE `Kategoria` LIKE 'M'";
  8. $suma_br_210[] = "SELECT SUM(Pow_Uzyt_IF) as sum_br_210_7 FROM `broniewskiego_2-10` WHERE `Kategoria` LIKE 'LU%'";
  9. $suma_br_210[] = "SELECT SUM(Pow_Przynal_IF) as sum_br_210_8 FROM `broniewskiego_2-10`";
  10.  
  11.  
  12. $sum = array();
  13. foreach($suma_br_210 as $r){
  14. $result = @mysql_query($r);
  15. $sum[] = mysql_fetch_assoc($result);
  16. }


kolejna sprawa, nie uzywasz mysqli, a to bład.

Calość niestety wygląda bardzo zle smile.gif Jak chcesz to zrobić dobrze to chyba powinineś zacząć od zaplanowania strukury danych raz jeszcze, bo zle zaplanowane tabele w BD powoduje duzo wiecej problemów niz jest to warte, jak chcesz zeby ci pomóc to napisz jakie masz dane co chcesz uzyskać co będziesz wyszukiwać w tych tabelach itd.
Therminus
Cytat(Lord @ 2.06.2016, 12:45:45 ) *
wydaje mi się, że jezeli masz wiele tabel i do każdej ulicy masz nowa tabele to jest to bład. Jezeli masz wiele tabel przechwujących taka sama strukture danych to powinines dodać to do jednej tabeli dodając jakies ID i wtedy masz dużo prostsze zapytania i sensowniejsza strukturę.


Tak więc po kolei.
Mam ponad 100 tabel, wszystkie o identycznej strukturze. Bla każdego budynku jedna tabela, plus do tego jeszcze jedna tabela 'dzialki'. Dane budynków, które są tam zawarte to:
  1. `ID` int(3) NOT NULL,
  2. `Ulica` varchar(30) COLLATE utf8_polish_ci DEFAULT NULL,
  3. `Klatka` int(4) NOT NULL,
  4. `Nr_Nazwa` varchar(20) CHARACTER SET utf8 NOT NULL,
  5. `Kategoria` varchar(10) CHARACTER SET utf8 DEFAULT NULL,
  6. `Pow_Uzyt` decimal(7,2) DEFAULT NULL,
  7. `Struktura` varchar(24) CHARACTER SET utf8 DEFAULT NULL,
  8. `Pow_przynal_zalicz` decimal(7,2) DEFAULT NULL,
  9. `Pow_razem` decimal(7,2) DEFAULT NULL,
  10. `Udzial_proc_w_nieruch` decimal(5,2) DEFAULT NULL,
  11. `Data_ust_prawa_odr_wlasn` date DEFAULT NULL,
  12. `Nr_aktu_notar` varchar(24) COLLATE utf8_polish_ci DEFAULT NULL,
  13. `Naz_podm_uzytk` varchar(20) COLLATE utf8_polish_ci DEFAULT NULL,
  14. `Rodz_prawa_do_lok` varchar(24) COLLATE utf8_polish_ci DEFAULT NULL,
  15. `Pow_Uzyt_IF` decimal(7,2) DEFAULT NULL,
  16. `Pow_Przynal_IF` decimal(7,2) DEFAULT NULL


Dane działek:
  1. `ID` int(3) NOT NULL,
  2. `Ulica` varchar(30) CHARACTER SET utf8 COLLATE utf8_polish_ci NOT NULL,
  3. `Klatka` varchar(10) CHARACTER SET utf8 COLLATE utf8_polish_ci NOT NULL,
  4. `Nr_dzialki` varchar(8) CHARACTER SET utf8 COLLATE utf8_polish_ci NOT NULL,
  5. `Obreb` varchar(20) CHARACTER SET utf8 COLLATE utf8_polish_ci NOT NULL,
  6. `Data_ost_wyp` date DEFAULT NULL,
  7. `Nr_KW` varchar(10) CHARACTER SET utf8 COLLATE utf8_polish_ci NOT NULL,
  8. `Data_ost_wyp_kw` date DEFAULT NULL,
  9. `Wlasn_od` date DEFAULT NULL,
  10. `WU_do` date DEFAULT NULL,
  11. `Akt_not_decyzja` varchar(35) CHARACTER SET utf8 COLLATE utf8_polish_ci DEFAULT NULL,
  12. `Pow_dzial` decimal(4,4) NOT NULL,
  13. `Nr_uchw_zarz` varchar(15) CHARACTER SET utf8 COLLATE utf8_polish_ci NOT NULL,
  14. `Data_uchw_zarz` date DEFAULT NULL,
  15. `Nr_aneksu` varchar(15) CHARACTER SET utf8 COLLATE utf8_polish_ci DEFAULT NULL,
  16. `Data_aneksu` date DEFAULT NULL,
  17. `Uwagi` varchar(15) DEFAULT NULL


Cytat(Lord @ 2.06.2016, 12:45:45 ) *
kolejna sprawa, nie uzywasz mysqli, a to bład.

Myślę, że da się to względnie łatwo naprawić.
Cytat(Lord @ 2.06.2016, 12:45:45 ) *
Calość niestety wygląda bardzo zle smile.gif Jak chcesz to zrobić dobrze to chyba powinineś zacząć od zaplanowania strukury danych raz jeszcze, bo zle zaplanowane tabele w BD powoduje duzo wiecej problemów niz jest to warte, jak chcesz zeby ci pomóc to napisz jakie masz dane co chcesz uzyskać co będziesz wyszukiwać w tych tabelach itd.

Chcę uzyskać przeglądanie tych danych jak wyżej budynkami, a także w zbiorczej tabeli mieć posumowane różne wartości. O tą tabelę zbiorczą się rozbiłem smile.gif
poniżej wklejam link do zrzutu wyglądu danych budynku
http://ifotos.pl/zobacz/bro2-10pn_saaqrwx.png
Może w przyszłości dorzuciłbym jakieś filtrowanie...
Pyton_000
Zrobiłeś sobie mega kuku taką strukturą wink.gif
Therminus
Cytat(Pyton_000 @ 2.06.2016, 14:51:08 ) *
Zrobiłeś sobie mega kuku taką strukturą wink.gif

Zacząłem się tego domyślać jakiś czas temu.
I co teraz? Pora umierać? wink.gif
Pyton_000
Zaorać strukturę i stworzyć na nowo a życie stanie się piękniejsze.
mlawnik
Osobna tabela budynki a do mieszka doda id_budynek i masz dużo łatwiej
Therminus
Cytat(mlawnik @ 2.06.2016, 16:17:09 ) *
Osobna tabela budynki a do mieszka doda id_budynek i masz dużo łatwiej

Masz na myśli wszystkie budynki z wszystkich ulic w jednej tabeli?
Lord
Cytat(Therminus @ 3.06.2016, 09:24:03 ) *
Masz na myśli wszystkie budynki z wszystkich ulic w jednej tabeli?

no tak to się robi smile.gif Musisz dodać tylko kolumne z ID która określi ci jaka ulicę smile.gif
Therminus
Cytat(Lord @ 3.06.2016, 15:14:42 ) *
Musisz dodać tylko kolumne z ID która określi ci jaka ulicę

Żebym cię dobrze zrozumiał...
Jeden wiersz, to jeden lokal (przynajmniej u mnie tak jest).
Prezentacja ma być budynkami, tak jak na obrazku z linka wyżej.
To oznacza, że dla wierszy z odnoszących się do jednego budynku, ma być ten sam ID?
Lord
Napisze Ci to na przykładzie adresów ludzi smile.gif

Masz takie dane:
Imie
Nazwisko
Miasto
Kod
Ulica
nr domu
Wojewodztwo
Kraj

To ile tabel stworzysz? Odzielna dla kazdego wojewdztwa? kraju? miasta? ulicy? no nietworzysz 1 tabele dodając jakies unikalne ID dla kazdego uzytkownika

ID | Imie | Nazwisko | Miasto | Kod | Ulica | nr domu | Wojewodztwo | Kraj

Tak naprawdę to mozna to rozbic jeszcze na 2 tabele, bo powiedzmy Miasto Wojewdztwo i Kraj jest takie same i bedzie sie dublować

TABELA 1
ID | Imie | Nazwisko | Kod | Ulica | nr domu | ID_Miasta

TABELA 2
ID_Miasta | Miasto | Wojewodztwo | Kraj

Tak naprawdę jak to podzielisz zalezy od tego co bedziesz chciał z tej bazy wyciagnąć itd.

Masz link przykładowej bazy danych jakiegos projektu
http://ai.ia.agh.edu.pl/wiki/_media/pl:dyd...aza2_do_wst.jpg


Therminus
Cytat(Lord @ 3.06.2016, 17:38:19 ) *
Napisze Ci to na przykładzie adresów ludzi smile.gif

Dzięki.
Coś tam zaczyna do mnie docierać. Na razie zrozumiałem tyle:
Dane z kolumn, które się powtarzają (dublują), mają wylądować w drugiej (albo nawet w trzeciej - zależy co się będzie dublować) tabeli.
A do pierwszej tabeli trafiają w to miejsce ID z drugiej tabeli.
W moim przypadku to może być:
1. tabela `Ulica`
2. tabela `Budynek`
3. tabela `Lokal` Ale tutaj powtarzają się numery klatek, numery lokali... nie wiem czy warto tworzyć oddzielne tabele na te numery (a Ty co o tym myślisz?).
Za to na pewno
4. tabela `Kategoria` i być może
5. tabela `Struktura`
Oczywiście tabela `Lokal` będzie zawierać ID tabel `Ulica`, `Budynek`, `Kategoria`i `Struktura`

Przyznam Lordzie, że jesteś dobrym nauczycielem. Przeczytałem wcześniej sporo na temat baz, próbowałem analizować różne przykłady i jakoś nie bardzo. A Ty jednym krótkim postem sprawiłeś, ze zaczynam kumać temat. Mam nadzieję. Jeśli się mylę, to mnie popraw.

Zdrówka.
offtopic.gif Jak będziesz przechodził koło spożywczaka, to kup sobie piwo. smile.gif
Lord

  1. `ID` int(3) NOT NULL,
  2. `Ulica` varchar(30) COLLATE utf8_polish_ci DEFAULT NULL,
  3. `Klatka` int(4) NOT NULL,
  4. `Nr_Nazwa` varchar(20) CHARACTER SET utf8 NOT NULL,
  5. `Kategoria` varchar(10) CHARACTER SET utf8 DEFAULT NULL,
  6. `Pow_Uzyt` decimal(7,2) DEFAULT NULL,
  7. `Struktura` varchar(24) CHARACTER SET utf8 DEFAULT NULL,
  8. `Pow_przynal_zalicz` decimal(7,2) DEFAULT NULL,
  9. `Pow_razem` decimal(7,2) DEFAULT NULL,
  10. `Udzial_proc_w_nieruch` decimal(5,2) DEFAULT NULL,
  11. `Data_ust_prawa_odr_wlasn` date DEFAULT NULL,
  12. `Nr_aktu_notar` varchar(24) COLLATE utf8_polish_ci DEFAULT NULL,
  13. `Naz_podm_uzytk` varchar(20) COLLATE utf8_polish_ci DEFAULT NULL,
  14. `Rodz_prawa_do_lok` varchar(24) COLLATE utf8_polish_ci DEFAULT NULL,
  15. `Pow_Uzyt_IF` decimal(7,2) DEFAULT NULL,
  16. `Pow_Przynal_IF` decimal(7,2) DEFAULT NULL


Dane działek:
  1. `ID` int(3) NOT NULL,
  2. `Ulica` varchar(30) CHARACTER SET utf8 COLLATE utf8_polish_ci NOT NULL,
  3. `Klatka` varchar(10) CHARACTER SET utf8 COLLATE utf8_polish_ci NOT NULL,
  4. `Nr_dzialki` varchar(8) CHARACTER SET utf8 COLLATE utf8_polish_ci NOT NULL,
  5. `Obreb` varchar(20) CHARACTER SET utf8 COLLATE utf8_polish_ci NOT NULL,
  6. `Data_ost_wyp` date DEFAULT NULL,
  7. `Nr_KW` varchar(10) CHARACTER SET utf8 COLLATE utf8_polish_ci NOT NULL,
  8. `Data_ost_wyp_kw` date DEFAULT NULL,
  9. `Wlasn_od` date DEFAULT NULL,
  10. `WU_do` date DEFAULT NULL,
  11. `Akt_not_decyzja` varchar(35) CHARACTER SET utf8 COLLATE utf8_polish_ci DEFAULT NULL,
  12. `Pow_dzial` decimal(4,4) NOT NULL,
  13. `Nr_uchw_zarz` varchar(15) CHARACTER SET utf8 COLLATE utf8_polish_ci NOT NULL,
  14. `Data_uchw_zarz` date DEFAULT NULL,
  15. `Nr_aneksu` varchar(15) CHARACTER SET utf8 COLLATE utf8_polish_ci DEFAULT NULL,
  16. `Data_aneksu` date DEFAULT NULL,
  17. `Uwagi` varchar(15) DEFAULT NULL


Te tabele co masz są dobre. Stwórz tylko kolejna tabele łączącą te 2 tebele gdzie masz id_budynku i id_działki, ewentualnie mozesz jeszcze wyodrębic tabele kategorie gdzie w tabeli budynku masz id_kategorii, a w tabeli kategoria masz id i nazwa i tak powinno działać
Therminus
Cytat(Lord @ 5.06.2016, 11:35:39 ) *
Te tabele co masz są dobre. Stwórz tylko kolejna tabele łączącą te 2 tebele gdzie masz id_budynku i id_działki, ewentualnie mozesz jeszcze wyodrębic tabele kategorie gdzie w tabeli budynku masz id_kategorii, a w tabeli kategoria masz id i nazwa i tak powinno działać

Dzięki bardzo.
Co do kategorii lokalu, to faktycznie, aż się prosi, aby stworzyć oddzielną tabelę, bo kategorie są tylko dwie, ale z drugiej strony kolumna kategorie zawiera tylko jedną literę "M" (większość) albo dwie litery "LU" (spora ilość). Nie wiem, czy to się opłaca zmieniać. Wszak indeks i tak trzeba w kolumnie wpisać, a czy to będzie jedna cyfra, czy też jedna lub dwie litery, to moim zdaniem niewielka różnica. Może się mylę, nie wiem.

Muszę jeszcze o jedno zapytać:
Tabela `budynki` będzie zawierać ponad 5700.
Jak w takim razie wyodrębnić budynek? Czy ID mają być unikalne dla każdego wiersza, czy takie same dla każdego budynku (niektóre budynki zawierają kilka klatek)?
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.