Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [MySQL] Łączenie danych z kilku tabel (SOLVED)
mattmatt
post
Post #1





Grupa: Zarejestrowani
Postów: 1
Pomógł: 0
Dołączył: 11.07.2022

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


Witam serdecznie. Potrzebuję porady w konstrukcji zapytania do bazy mysql... Mam 2 następujące tabele opisujące produkty i nadawane im statusy...


Products
  1. id, productName
  2. 1, Pomarańcza
  3. 2, Cebula
  4. 3, Jabłko
  5. 4, Czereśnia


ProductStatus
  1. id, productId, STATUS, date
  2. 1, 1, 1, 2022-07-11 07:00:00
  3. 2, 1, 3, 2022-07-11 08:00:00
  4. 3, 1, 5, 2022-07-11 09:00:00
  5. 4, 3, 1, 2022-07-11 07:00:00



Statusy do produktów są przypisywane na bieżąco i potrzebuję za pomocą zapytania mysql wyświetlać listę produktów tylko tych gdzie ostatnio dodany status (ORDER BY date DESC) jest równy 1 lub produkt ten nie znajduje się w tej tabeli statusów. Dotychczas robiłem to na zasadzie wyświetlania wszystkich produktów w pętli (prawie jak poniżej) lecz potrzebuję to zoptymalizować do jednego zapytania. Czy jest to możliwe?


  1. $queryProduct = mysqli_query($db, "SELECT * FROM Products");
  2. while ($queryProductR = mysqli_fetch_array($queryProduct)) {
  3.  
  4. $productStatus = false;
  5.  
  6. $queryStatus = mysqli_query($db, "SELECT * FROM ProductStatus WHERE productId=".$queryProductR[id]." ORDER BY date DESC LIMIT 1");
  7. $queryStatusR = mysqli_fetch_array($queryStatus);
  8.  
  9. if($queryStatusR[status]==1) {
  10. $productStatus = true;
  11. }
  12. else if($queryStatusR[status]==null){
  13. $productStatus = true;
  14. }
  15. else {
  16. $productStatus = false;
  17. }
  18.  
  19. if($productStatus) {
  20. // wyświetlenie produktu
  21. }
  22. }




Problem rozwiązany smile.gif

  1. SELECT * FROM Products LEFT JOIN (SELECT * FROM ProductStatus WHERE STATUS=1 GROUP BY date DESC) AS ProductStatusB ON Products.id=ProductStatusB.productId GROUP BY Products.id


Ten post edytował mattmatt 12.07.2022, 05:47:51
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 Aktualny czas: 19.08.2025 - 18:04