Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> dwa zapytania do bazy jak zrobić
hpzzz
post 20.11.2018, 17:36:14
Post #1





Grupa: Zarejestrowani
Postów: 7
Pomógł: 0
Dołączył: 16.03.2018

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


Witam połączenie do bazy danych firebirda php 5
Teraz dane wyświetlają mi się np. pz1 numer a w nim pozycja index i znowu dokument pz1 numer i index
A jak zrobić żeby się wyświetlał pz1 i wszystkie indeksy w dokumencie

Teraz dane wyświetlają mi się formie np.

Faktura zakupu: 00000360/WLN/18/F Firma INTER
Dokument:PZ1/1/1/2018
Index: 8800-015-055 Nazwa FILTR OLEJU ilość 1. szt 58.14(sztuka cena) wartość 58.14
Faktura zakupu: 00000360/WLN/18/F Firma INTER
Dokument:PZ1/1/1/2018
Index: 6657-022-015 Nazwa FILTR KABINY ilość 1. szt 34.93(sztuka cena) wartość 34.93
Faktura zakupu: 00000360/WLN/18/F Firma INTER
Dokument:PZ1/1/1/2018
Index: 8800-023-200 Nazwa FILTR POWIETRZA ilość 1. szt 50.91(sztuka cena) wartość 50.91
Faktura zakupu: 00000360/WLN/18/F Firma INTER
Dokument:PZ1/1/1/2018
Index: 0631-935-375 Nazwa LOZYSKO KOLA ilość 1. szt 55.93(sztuka cena) wartość 55.93
Faktura zakupu: 00000360/WLN/18/F Firma INTER
Dokument:PZ1/1/1/2018
Index: 0631-935-375 Nazwa LOZYSKO KOLA ilość 1. szt 65.18(sztuka cena) wartość 65.18
Faktura zakupu: ASYG 126455/1 Firma INTER

Jak zrobić 2 zapytania do bazy żeby dane się wyświetlały w formie poniżej
Chce uzyskać taki efekt a nie jak wyżej powtarzanie się nazwy dokumentu PZ1
Faktura zakupu: 00000360/WLN/18/F Firma INTER
Dokument:PZ1/1/1/2018
Index: 8800-015-055 Nazwa FILTR OLEJU ilość 1. szt 58.14(sztuka cena) wartość 58.14
Index: 6657-022-015 Nazwa FILTR KABINY ilość 1. szt 34.93(sztuka cena) wartość 34.93
Index: 8800-023-200 Nazwa FILTR POWIETRZA ilość 1. szt 50.91(sztuka cena) wartość 50.91
Index: 0631-935-375 Nazwa LOZYSKO KOLA ilość 1. szt 55.93(sztuka cena) wartość 55.93
Index: 0631-935-375 Nazwa LOZYSKO KOLA ilość 1. szt 65.18(sztuka cena) wartość 65.18
Gdzie wstawić drugie zapytanie żeby w pierwszym był nazwa i numer PZ1 a w drugim zapytaniu
Wszystkie indeksy jak to zrobić .
Domyślam się ze w 2 zapytaniach
  1. <?php
  2.  
  3. $data = $_GET['data'];
  4. include("../haslo/test.php");
  5.  
  6. $dbh = ibase_connect($host, $user ,$pass, 'UTF-8')or die('Błąd: Nie można połączyć z Baza!');
  7.  
  8. $query = sprintf ("select (MAGAZYNOBR.SYMBOLDOKMAG ||'/'||MAGAZYNOBR.NUMERDOK||'/'|| MAGAZYNOBR.OKRESMC||'/'|| MAGAZYNOBR.OKRESROK )
  9. ,MAGAZYNDOK.DATAWYSTAW
  10. ,MAGAZYNOBR.INDEKS
  11. ,INDEKS.NAZWAINDEKSU
  12. ,MAGAZYNOBR.JM
  13. ,left(MAGAZYNOBR.ILOSCPOZ,'2')
  14. ,MAGAZYNOBR.CENAZAKUPU
  15. ,MAGAZYNOBR.WARTOSCMAG
  16. ,KONTRAHENCI.NAZWA
  17. ,MAGAZYNDOK.FAKTURAZAKUPU
  18. from
  19. MAGAZYNOBR
  20. left join MAGAZYNDOK on MAGAZYNOBR.OKRESROK=MAGAZYNDOK.OKRESROK and MAGAZYNOBR.OKRESMC=MAGAZYNDOK.OKRESMC and MAGAZYNOBR.MAGAZYN=MAGAZYNDOK.MAGAZYN and MAGAZYNOBR.SYMBOLDOKMAG=MAGAZYNDOK.SYMBOLDOKMAG and MAGAZYNOBR.NUMERDOK=MAGAZYNDOK.NUMERDOK
  21. left join INDEKS on MAGAZYNOBR.INDEKS=INDEKS.INDEKS
  22. left join WYKAZMAG on MAGAZYNOBR.MAGAZYN=WYKAZMAG.MAGAZYN
  23. left join KONTRAHENCI on MAGAZYNDOK.KONTRAHENT=KONTRAHENCI.KONTRAHENT
  24. where
  25. (MAGAZYNDOK.DATAZATWIERDZ IS NOT NULL) and
  26. (magazynDOK.magazyn='7') and
  27. (magazynDOK.symboldokmag='PZ1')and MAGAZYNOBR.OKRESROK='2018' and KONTRAHENCI.KONTRAHENT='14799' order by
  28. MAGAZYNOBR.SYMBOLDOKMAG,MAGAZYNOBR.NUMERDOK,MAGAZYNOBR.OKRESMC,MAGAZYNOBR.OKRESR
    OK,MAGAZYNDOK.DATAWYSTAW,MAGAZYNOBR.MAGAZYN,MAGAZYNOBR.SYMBOLDOKMAG"
    );
  29. $qansw = ibase_query($dbh, $query)
  30. or die(ibase_errmsg());
  31. while ($dbrow = ibase_fetch_row($qansw, IBASE_TEXT))
  32. {
  33. echo"Faktura zakupu: $dbrow[9] Firma $dbrow[8]<br>";
  34. echo "Dokument:$dbrow[0]<br>\r\n";
  35. echo "Index: $dbrow[2] Nazwa $dbrow[3] ilość $dbrow[5] $dbrow[4] $dbrow[6](sztuka cena) wartość $dbrow[7] <br>\r\n";
  36. }
  37.  
  38. ibase_free_result($qansw);
  39. ibase_close($dbh);
  40.  
  41. echo "$count<br>";
  42.  
  43.  
  44. ?>
  45.  
Go to the top of the page
+Quote Post
Neutral
post 24.11.2018, 03:01:40
Post #2





Grupa: Zarejestrowani
Postów: 252
Pomógł: 38
Dołączył: 10.01.2016

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


Jeśli masz np. taką tabelę w bazie:

  1. SELECT * FROM a;

Kod
+----+--------------+-------------+------+
| id | col1         | col2        | col3 |
+----+--------------+-------------+------+
|  1 | 00000360     | wln         | 18   |
|  2 | pz1          | 1           | 1    |
|  3 | 8800-015-055 | filtr oleju | 1    |
|  4 | 00000360     | wln         | 18   |
|  5 | pz1          | 1           | 1    |
|  6 | 8800-015-055 | filtr oleju | 1    |
| 37 | x            | y           | 2    |
+----+--------------+-------------+------+


, to po np. takim zapytaniu:

  1. SELECT * FROM a GROUP BY col1;


dostaniesz taki rezultat:

Kod
+----+--------------+-------------+------+
| id | col1         | col2        | col3 |
+----+--------------+-------------+------+
|  1 | 00000360     | wln         | 18   |
|  2 | pz1          | 1           | 1    |
|  3 | 8800-015-055 | filtr oleju | 1    |
| 37 | x            | y           | 2    |
+----+--------------+-------------+------+


Żeby nie było nieporozumień, to najlepiej byłoby gdybyś grupował rezultat po wszystkich kolumnach, ponieważ dane mogą się powtórzyć w którejś kolumnie, przykład:

  1. SELECT * FROM c;


Kod
+----+--------------+-------------+------+
| id | col1         | col2        | col3 |
+----+--------------+-------------+------+
|  1 | 00000360     | wln         | 18   |
|  2 | pz1          | 1           | 1    |
|  3 | 8800-015-055 | filtr oleju | 1    |
|  4 | 00000360     | wln         | 18   |
|  5 | pz1          | 1           | 1    |
|  6 | 8800-015-055 | filtr oleju | 1    |
|  8 | pz1          | y           | 2    |
+----+--------------+-------------+------+


  1. SELECT * FROM c GROUP BY col1;


Kod
+----+--------------+-------------+------+
| id | col1         | col2        | col3 |
+----+--------------+-------------+------+
|  1 | 00000360     | wln         | 18   |
|  2 | pz1          | 1           | 1    |
|  3 | 8800-015-055 | filtr oleju | 1    |
+----+--------------+-------------+------+


  1. SELECT * FROM c GROUP BY col1, col2, col3;

Kod
+----+--------------+-------------+------+
| id | col1         | col2        | col3 |
+----+--------------+-------------+------+
|  1 | 00000360     | wln         | 18   |
|  2 | pz1          | 1           | 1    |
|  3 | 8800-015-055 | filtr oleju | 1    |
|  8 | pz1          | y           | 2    |
+----+--------------+-------------+------+


Nie wiem, czy jest jakiś krótszy zapis niż ten:

  1. SELECT * FROM a GROUP BY col1, col, col3;


Najlepiej chyba byłoby grupować po kolumnie, która nie ma primary key, czy jakiegoś innego nie unikatowego klucza, najczęściej nie id.

Poczytaj o tym na "swojej" dokumentacji Firebird:
https://www.firebirdsql.org/pdfmanual/html/...e-aggrfunc.html

Napisałem tylko przykład, bo ja piszę w MySQL, a nie w tej bazie danych, co Ty.

Myślę, że wcielisz ten przykład do swojego projektu.

Proponuję, abyś przesiadł się na PHP 7, ponieważ teraz to już jest standard. W wersji mniejszej niż 7 nie ma pewnych "features" (cech).

Ten post edytował Neutral 24.11.2018, 03:24:02
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: 14.11.2019 - 04:58