Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [PHP] jak przemnożyć dwie tabele
dentopolis
post 21.03.2017, 21:02:18
Post #1





Grupa: Zarejestrowani
Postów: 252
Pomógł: 0
Dołączył: 14.08.2016

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


mam dwie tabele z wartościami liczbowymi. w jaki sposób można je przemnożyć czyli wezlyniepowiekszone z tabeli badanie pomnożyć przez wezlyniepowiekszone z tabeli choroby.



Go to the top of the page
+Quote Post
Niree
post 23.03.2017, 02:54:59
Post #2





Grupa: Zarejestrowani
Postów: 220
Pomógł: 18
Dołączył: 5.02.2016
Skąd: Polska

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


$q1 = zapytanie("SELECT `wezlyniepowiekszone` FROM `badanie` WHERE `id` = 'JAKIES ID'");
$row1 = $q1->fetchrow();

$q2 = zapytanie("SELECT `wezlyniepowiekszone` FROM `choroby` WHERE `id` = 'JAKIES ID'");
$row2 = $q2->fetchrow();

echo $row1['wezlyniepowiekszone'] * $row2['wezlyniepowiekszone'];

Ewentualnie jeśli nie chcesz pobierać tylko jednego rekordu, to wrzuć wszystko w pętle, a na końcu pomnóż.
Go to the top of the page
+Quote Post
Pyton_000
post 23.03.2017, 08:46:53
Post #3





Grupa: Zarejestrowani
Postów: 8 068
Pomógł: 1414
Dołączył: 26.10.2005

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


@Niree trochu bez sensu pobierać to 2 zapytaniami.

@dentopolis co chcesz mieć w wyniku? Rozumiem że dla każdego rekordu z tabeli `badanie` chcesz mieć tyle rekordów wynikowych ile jest wpisów w `choroby`? Jeśli tak to:
Kod
SELECT `badania`.`wezlyniepowiekszone`*`choroby`.`wezlyniepowiekszone` FROM `badania`, `choroby` WHERE

Takie zapytanie wygeneruje Ci iloczyn kartezjański czyli wynikiem będą wiersze połączone każdy z każdym. więc dla 1 i 2 wynik da 2 wiersze, dla 2 i 2 da 4 itd.
Go to the top of the page
+Quote Post
dentopolis
post 23.03.2017, 16:26:50
Post #4





Grupa: Zarejestrowani
Postów: 252
Pomógł: 0
Dołączył: 14.08.2016

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


w wyniku potrzebuję nową tabelę w której wartościami są iloczyny tych samych objawów, nie każdy z każdym czyli:

wezłychłonneniepowiększone (z tabeli badanie) x wezłychłonneniepowiększone (z tabeli choroby)
gorączka (z tabeli badanie) x gorączka (z tabeli choroby)
Go to the top of the page
+Quote Post
trueblue
post 23.03.2017, 16:45:47
Post #5





Grupa: Zarejestrowani
Postów: 6 806
Pomógł: 1827
Dołączył: 11.03.2014

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


Cytat(dentopolis @ 23.03.2017, 16:26:50 ) *
w wyniku potrzebuję nową tabelę w której wartościami są iloczyny tych samych objawów, nie każdy z każdym czyli:

wezłychłonneniepowiększone (z tabeli badanie) x wezłychłonneniepowiększone (z tabeli choroby)
gorączka (z tabeli badanie) x gorączka (z tabeli choroby)

I dokładnie to otrzymasz dzięki rozwiązaniom, które pokazał Niree i Pyton_000.
Natomiast Pyton_000 miał na myśli, to, że nie wskazując, który wiersz z jednej tabeli ma być przemnożony z którym wierszem z drugiej tabeli, otrzymasz iloczyn kartezjański (każdy z każdym - ale wiersz, a nie kolumny).
Twoim pytaniem jest jak przemnożyć wiersze, a nie tabele. Ale nadal nie wiadomo na jakiej zasadzie - który wiersz z którym. Wygląda na to, że chcesz przemożyć wiersz dotyczący pacjenta z tabeli badania ze wszystkimi wierszami z tabeli choroby. Jeśli tak jest, to do zapytania Pyton_000 dodajesz warunek na id pacjenta. De facto otrzymasz i tak iloczyn kartezjański, ale ograniczony poprzez wybór z tabeli badania.


--------------------
Go to the top of the page
+Quote Post
dentopolis
post 23.03.2017, 22:34:15
Post #6





Grupa: Zarejestrowani
Postów: 252
Pomógł: 0
Dołączył: 14.08.2016

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


jak więc powinien wyglądać przykładowy kod wg Niree? (mimo wszystko wolę dłuższe ale takie rozwiązanie).

  1. <?php
  2. $servername = "localhost";
  3. $username = "root";
  4. $password = "";
  5. $dbname = "gabinet";
  6.  
  7. // Create connection
  8. $conn = new mysqli($servername, $username, $password, $dbname);
  9. // Check connection
  10. if ($conn->connect_error) {
  11. die("Connection failed: " . $conn->connect_error);
  12. }
  13. $conn->set_charset("utf8");
  14.  
  15.  
  16. $q1 = query("SELECT `wezlyniepowiekszone` FROM `badania` WHERE `id` = '1'");
  17. $row1 = $q1->fetchrow();
  18.  
  19. $q2 = query("SELECT `wezlyniepowiekszone` FROM `choroby` WHERE `id` = '1'");
  20. $row2 = $q2->fetchrow();
  21.  
  22. echo $row1['wezlyniepowiekszone'] * $row2['wezlyniepowiekszone'];
  23.  
Go to the top of the page
+Quote Post
trueblue
post 23.03.2017, 22:38:01
Post #7





Grupa: Zarejestrowani
Postów: 6 806
Pomógł: 1827
Dołączył: 11.03.2014

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


Które rekordy dla jednego pacjenta z obydwu tabel chcesz mnożyć?


--------------------
Go to the top of the page
+Quote Post
dentopolis
post 24.03.2017, 12:11:24
Post #8





Grupa: Zarejestrowani
Postów: 252
Pomógł: 0
Dołączył: 14.08.2016

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


efektem ma być taka tabela jak poniżej czyli choroba, nazwa łacińska, punkty (iloczyn objawu z tabeli choroby * objawu z tabeli badania), objawy różniące kolejne prawdopodobne choroby z pierwszym najbardziej prawdopodobnym

Go to the top of the page
+Quote Post
trueblue
post 24.03.2017, 12:31:50
Post #9





Grupa: Zarejestrowani
Postów: 6 806
Pomógł: 1827
Dołączył: 11.03.2014

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


Robisz więc tak jak opisałem: http://forum.php.pl/index.php?s=&showt...t&p=1212968
Warunek ma być na id pacjenta w tabeli badanie. Otrzymasz X rekordów gdzie X=1*Y, a Y to liczba rekordów z chorobami.
Nie napisałeś skąd się bierze suma. Ale zakładam, że to suma wszystkich iloczynów, co ma wskazywać na większą szansę diagnozy danej choroby. Tak więc musisz posumować wszystkie iloczyny.
Tu przydałaby się inna budowa obydwu tabel, podobnie jak radzili Ci koledzy w przypadku tabeli ze stanem uzębienia.


--------------------
Go to the top of the page
+Quote Post
dentopolis
post 24.03.2017, 22:42:06
Post #10





Grupa: Zarejestrowani
Postów: 252
Pomógł: 0
Dołączył: 14.08.2016

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


udało mi się z tabelą tak jak chciałem oprócz różnych objawów kolejnych chorób względem najbardziej prawdopodobnej. jak do tego podejść?
Go to the top of the page
+Quote Post

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

 



RSS Wersja Lo-Fi Aktualny czas: 8.07.2025 - 20:51