Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: jak połączyć zapytania
Forum PHP.pl > Forum > Bazy danych > MySQL
krzyszbi
witam

mam taki kod php i mysql razem głównie chodzi mi o zmiane zapytania
  1. <?php
  2. $query_rr = "SELECT 
  3. DISTINCT(cd.categories_id),
  4. cd.categories_name
  5. FROM 
  6.  products_description pd, 
  7. products p,
  8. categories c,
  9. products_to_categories pc,
  10. categories_description cd
  11. WHERE 
  12. p.manufacturers_id=".$row['manufacturers_id']." AND 
  13. pd.products_id=p.products_id AND 
  14. pc.products_id=p.products_id AND
  15. pc.categories_id=cd.categories_id AND 
  16. cd.language_id=".$languages_id;
  17. $result_rr = mysql_query ($query_rr);
  18. while ($row_rr = mysql_fetch_array($result_rr)) 
  19. {
  20. $query_rp = "SELECT 
  21.  COUNT(p.products_id) 
  22. FROM 
  23.  products p, 
  24.  products_to_categories pc 
  25.  WHERE 
  26.  p.manufacturers_id=".$row['manufacturers_id']." AND
  27.  p.products_id=pc.products_id AND 
  28. pc.categories_id=".$row_rr['categories_id']; 
  29.  $result_rp = mysql_query ($query_rp);
  30. $row_rp = mysql_fetch_array($result_rp);
  31. echo'<a class="dark_2" href="'.FILENAME_DEFAULT.'?cPath='.$row_rr['categories_id'].'&manufacturers_id='.$row['manufacturers_id'].'&'.$SID.'">'.$row_rr['categories_name'].'</a><span style="float: right; font-size: 8.5px;">['.$row_rp['COUNT(p.products_id)'].']</span><br />'."nr";
  32. }
  33. ?>

próbowałem tak ale cos mi nie działa i nie wiem jak to zrobić poprawnie aby pobrać nazwe i ilość produktów danego producenta
  1. SELECT DISTINCT(cd.categories_id), cd.categories_name, COUNT(p.products_id) GRUP BY cd.categories_id FROM products_description pd, products p, categories c, products_to_categories pc, categories_description cd WHERE p.manufacturers_id=12 AND pd.products_id=p.products_id AND pc.products_id=p.products_id AND pc.categories_id=cd.categories_id AND pc.categories_id=cd.categories_id AND cd.language_id=1
bendi
Jeżeli dobrze zauważyłem to chodzi o wyliczenie ile produktów danego producenta znajduje się w bazie. W takim przypadku proponuję zmienić zapytanie na:
  1. SELECT
  2. COUNT(*)
  3. FROM products_description pd
  4. JOIN products p ON pd.products_id=p.products_id
  5. -- nazwy kategorii chyba tez mozna wywalic, ale nie jestem pewien
  6. JOIN products_to_categories pc pc.products_id=p.products_id
  7. -- wydaje mi sie ze opisy kategorii tutaj sie na nic nie przydadza
  8. -- JOIN categories_description cd pc.categories_id=cd.categories_id
  9. WHERE -- printf - wtedy d zostanie zastapione odpowiednim id'kiem
  10. cd.language_id=%d
  11. GROUP BY
  12. p.manufacturers_id;

Można by jeszcze sprawdzić czy napewno te wszystkie złączenia są potrzebne, bo coś mi się wydaje, że niekoniecznie, ale nie znam struktury i szczerze mówiąc średnio by mi się chciało ją analizować.
krzyszbi
dzieki za odpowiedz mniej więcej o to mi chodzi ale nazwa kategori musi zostac bo chcę osiagnąc taki efekt że w jednym zapytaniu wyciągam z bazy nazwe kategori i ilośc produktów jakie ma dany producent ( w sumie to sa trzy zapytania ) ale tylko do takiej postaci mi sie udało to uprościc na początku miałem ich coś koło 6 aby ten sam efekt osiągnąć
  1. <?php
  2. $query = "SELECT manufacturers_id,manufacturers_name FROM manufacturers ORDER BY manufacturers_name DESC";
  3. //tu wybieram wszystkich producentów
  4. $result = mysql_query ($query);
  5. echo'<p class="tytil_maly">Producenci</p>
  6. <div class="lista">'."nr";
  7. while ($row = mysql_fetch_array($result)) 
  8. {
  9. //pętla w której wyświetlam producentów i jeśli jest jakiś wybrany to chcę pokazać
     w jakich kategoriach
  10. //on ma swoje produkty łącznie z ilościa tych produuktów w danej kategorii
  11. //niestety register_glogals muszą byc włączone
  12. if ($manufacturers_id == $row['manufacturers_id'])
  13. {
  14. echo' <img class="strzalka" src="files/strzalka_sublista.gif" alt="->" /> ';
  15. }
  16. else 
  17. {
  18. echo' <img class="strzalka" src="files/sztrzalka.gif" alt="->" /> ';
  19. }
  20. echo'<a class="dark_3" href="'.FILENAME_DEFAULT.'?manufacturers_id='.$row['manufacturers_id'].'&'.$SID.'">'.$row['manufacturers_name'].'</a><br />'."nr";
  21. if ($manufacturers_id == $row['manufacturers_id'])
  22. {
  23. $query_rr = "SELECT 
  24. DISTINCT(cd.categories_id),
  25. cd.categories_name
  26. FROM 
  27.  products_description pd, 
  28. products p,
  29. categories c,
  30. products_to_categories pc,
  31. categories_description cd
  32. WHERE 
  33. p.manufacturers_id=".$row['manufacturers_id']." AND 
  34. pd.products_id=p.products_id AND 
  35. pc.products_id=p.products_id AND
  36. pc.categories_id=cd.categories_id AND 
  37. cd.language_id=".$languages_id;
  38. $result_rr = mysql_query ($query_rr);
  39. while ($row_rr = mysql_fetch_array($result_rr)) 
  40. {
  41. $query_rp = "SELECT 
  42.  COUNT(p.products_id) 
  43. FROM 
  44.  products p, 
  45.  products_to_categories pc 
  46.  WHERE 
  47.  p.manufacturers_id=".$row['manufacturers_id']." AND
  48.  p.products_id=pc.products_id AND 
  49. pc.categories_id=".$row_rr['categories_id']; 
  50.  $result_rp = mysql_query ($query_rp);
  51. $row_rp = mysql_fetch_array($result_rp);
  52. echo'<a class="dark_2" href="'.FILENAME_DEFAULT.'?cPath='.$row_rr['categories_id'].'&manufacturers_id='.$row['manufacturers_id'].'&'.$SID.'">'.$row_rr['categories_name'].'</a><span style="float: right; font-size: 8.5px;">['.$row_rp['COUNT(p.products_id)'].']</span><br />'."nr";
  53. }
  54. } 
  55. }
  56. echo'</div>';
  57. ?>

może to sie da jakoś usprawnic w obecnym kształcie działa ale jak sie da lepiej to bede wdzięczny za podpowiedzi co , jak i dlaczego ( cały czas sie ostro ucze php i mysla snitch.gif )
~bendi - nie za bardzo rozumiem twoje zapytanie , nazwa kategori musi zostac bo jest potrzebna do wyświetlania jako link
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-2019 Invision Power Services, Inc.