Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: grupowanie/segregowanie [SQL]
Forum PHP.pl > Forum > Przedszkole
agamemnon
Witam
Mam następujący problem

Posiadam w tabeli listę osób które chcą być powiadamiane o jakimś tam produkcie. W tabeli istnieją Kolumny:
ID - numer porządkowy
IDitem - numer produktu w związku z którym jest zapytanie
Email - e-mail wpisującego
Date_start - data wpisu
Cała tabela nazywa sie inform_me
Aby dowiedzieć się o jaką pozycję chodziło danemu użytkownikowi IDitem należy przyporządkować ID danego produktu z tabeli o nazwie "store"

Chciałbym aby w stronie administracyjnej była taka lista osób które wpisują się na listę z ale (i tu utrudnienie) aby w momencie gdy już wcześniej wystąpił podany wpis grupował to w jeden zapis informując odpowiednią liczbą (odpowiadająca za ilość podobnych zapytań użytkowników) i oczywiście by wszystko było segregowane od najnowszych wpisów.
Mam nieudolne próby zrobienia czegoś takiego: (niestety na pierwszych pozycjach nie ma wpisów najnowszych..wyświetla się w sumie to co chce :/ w bazia aktualnie jest okolo 4000 wpisow)

  1. <?
  2. switch($u){
  3. case'list':?>
  4. <br>
  5. <table width="100%" border="0" cellspacing="1" cellpadding="0" bgcolor="#003366">
  6. <tr> 
  7. <td bgcolor="#E6F2FF" height="15">Aktualne wpisy</td>
  8. </tr>
  9. </table>
  10. <?
  11. $row_item = mysql_fetch_array(mysql_query("SELECT Name FROM $db_table_store WHERE ID='$_GET[id]' LIMIT 1"));
  12. echo"<div align="left"><span class="header">$row_item[0]</span><br><br></div>";
  13. $query = mysql_query("SELECT ID, IDitem, Date_start, Email FROM $db_table_inform_me WHERE IDitem='$_GET[id]'");
  14. while($row = mysql_fetch_array($query))
  15. {
  16. $ID = $row[ID];
  17. $IDitem = stripslashes($row[IDitem]);
  18. $email  = stripslashes($row[Email]);
  19. $data = $row[Date_start];
  20. echo" <a href="mailto:$email">$email</a>, ";
  21. echo"$data <br>";
  22. }
  23. break;
  24. default:?>
  25. <br>
  26. <table width="100%" border="0" cellspacing="1" cellpadding="0" bgcolor="#003366">
  27. <tr> 
  28. <td bgcolor="#E6F2FF" height="15">Aktualne wpisy</td>
  29. </tr>
  30. </table>
  31. <br>
  32. <table width="100%" border="0" cellspacing="1" cellpadding="0">
  33. <tr bgcolor="#BBDDFF"> 
  34. <td width="2%">Lp</td>
  35. <td bgcolor="#BBDDFF">Pozycja<br>
  36. </td>
  37. <td bgcolor="#BBDDFF"><div align="center">Wpisów</div>
  38. </td>
  39. <td width="13%"> 
  40. <div align="center">Opcje</div>
  41. </td>
  42. </tr>
  43. <tr> 
  44. <td colspan="4"> 
  45. <hr noshade size="1">
  46. </td>
  47. </tr>
  48. <?
  49. $showrows = 1000;
  50. $od = 0+$_GET[od];
  51. $u_lp= $u_lp+$_GET[od];
  52.  
  53. $c_rows = mysql_query("SELECT COUNT(ID) FROM $db_table_inform_me GROUP BY IDitem");
  54. $c_row = mysql_fetch_row($c_rows);
  55. $count_rows = $c_row[0];
  56. $query = mysql_query("SELECT ID, IDitem FROM $db_table_inform_me GROUP BY IDitem ORDER BY Date_st
    art DESC LIMIT 200, $showrows"
    );
  57. while($row = mysql_fetch_array($query))
  58. {
  59. $ID = $row[ID];
  60. $IDitem = stripslashes($row[IDitem]);
  61. $date = stripslashes($row[Date_start]);
  62. $color = colors();
  63. $u_lp=$u_lp+1;
  64.  
  65.  
  66. $row_item = mysql_fetch_array(mysql_query("SELECT Name FROM $db_table_store WHERE ID='$IDitem' LIMIT 10"));
  67.  
  68. $count_rows_item = mysql_fetch_row(mysql_query("SELECT COUNT(ID) FROM $db_table_inform_me WHERE IDitem='$IDitem'"));
  69.  
  70.  
  71. echo"<tr bgcolor="$color">n 
  72. <td>$u_lp</td>n
  73. <td> ($IDitem)<a href="index.php?page=inf_me2&u=list&id=$IDitem">$row_item[0]</a></td>n
  74. <td><div align="center">$count_rows_item[0]</div></td>n
  75. <td><div align="center"><a onclick="return confirmSubmit()" href="action.php?act=del_inf_me2&id=$IDitem"><img src="pix/ico_delete.gif" border="0" alt="Usu&#324;"></a></div></td>n
  76. </tr>n";
  77. }?>
  78. </table>
  79. <hr size="1" noshade>
  80. <div align="center">
  81. <?sort_page($showrows, index, inf_me, 10, $cat, 100, $count_rows);?>
  82. <br>
  83. <?}?>
  84. </div>
dr_bonzo
Zajmij sie najpierw samym SQLem, a potem wrzucaniem tego do php -- czyli lepiej podaj SQL, ktory utworzy tabele + troche przykladowych i ODPOWIEDNICH danych. Bo takiego ^^ skryptu to ja nawet nie uruchomie u siebie.

Cytat
Chciałbym aby w stronie administracyjnej była taka lista osób które wpisują się na listę z ale (i tu utrudnienie) aby w momencie gdy już wcześniej wystąpił podany wpis grupował to w jeden zapis informując odpowiednią liczbą

Czyli co ma zwracac?
- ile razy user dodal siebie do danego produktu [aby byc informowanym o nim]?
- czy ile userow dodale ten sam produkt [do bycia informowanym o nim]?
agamemnon
Cytat(dr_bonzo @ 16.01.2007, 17:44:18 ) *
- czy ile userow dodale ten sam produkt [do bycia informowanym o nim]?

oto wlasnie mi chodzilo exclamation.gif

wypisuje wpisy od najnowszych i w nawiasie pokazuje ilość uzytkowników którzy się wpisali do tego produktu
dr_bonzo
Jak chcesz to sortowac po dacie? Przeciez user1 mogl dodac to tydzien temu, drugi wczoraj a w miedzyczasie user3 dodal inny produkt?

Samo grupowanie:
  1. SELECT count( id ) FROM ta_tabela GROUP BY produkt_id


policzy ci ilosc powiadomien dla kazdego z obiektow.
agamemnon
Tak to zapytanie już użyłem jak widać post wyżej:


  1. $c_rows = mysql_query("SELECT COUNT(ID) FROM $db_table_inform_me GROUP BY IDitem");
  2. $c_row = mysql_fetch_row($c_rows);
  3. $count_rows = $c_row[0];
  4. $query = mysql_query("SELECT ID, IDitem FROM $db_table_inform_me GROUP BY IDitem ORDER BY Date_start DESC LIMIT 4300, $showrows");
  5. while($row = mysql_fetch_array($query))
  6. {
  7. $ID = $row[ID];
  8. $IDitem = stripslashes($row[IDitem]);
  9. $date = stripslashes($row[Date_start]);
  10. $color = colors();
  11. $u_lp=$u_lp+1;
  12.  
  13. $row_item = mysql_fetch_array(mysql_query("SELECT Name FROM $db_table_store WHERE ID='$IDitem' LIMIT 10"));
  14.  
  15. $count_rows_item = mysql_fetch_row(mysql_query("SELECT COUNT(ID) FROM $db_table_inform_me WHERE IDitem='$IDitem'"));


Tyle że tutaj często jest tak że na pierwszej pozycji mam wpis z dzisiaj, następnie z dzisiaj, wczoraj,wczoraj dzisiaj... Nie jest to zrobione po kolei.. I tak np. dziś posiadam 10 wpisów a na pierwszej stronie gdzie jest 100 elementów wypisanych tymi zapytaniami tylko 4 z nich sa widoczne inne są gdzieś daleko stad:/

WIEM CO JUŻ NIE GRA ...OTÓŻ WW SKRYPT SORTUJE TO WG PIERWSZEGO WPISU...tak wiec gdy pierwsza osoba wpisała się do danej pozycji np. w 2005 roku a trzecia osoba w 2007 to on zrzuci to na ostatnia strone bo posortuje to wg pierwszego wpisu exclamation.gif!!!! Jak w takim razie to zmienić questionmark.gif
dr_bonzo
Cytat
Tak to zapytanie już użyłem jak widać post wyże

Nie zaglebialem sie w twoj kod.

Cytat
OTÓŻ WW SKRYPT SORTUJE TO WG PIERWSZEGO WPISU
o to wlasnie pytalem -- jak chcesz to sortowac, chcesz sortowac wg. najnowszego wpisu dla danego przedmiotu? no to ORDER BY MAX( data ) DESC z group'em
agamemnon
Dobrze dziękuję. Ale żeby już uciąć dalsze dyskusje jak powinno wyglądać całe zapytanie?



  1. $c_rows = mysql_query("SELECT COUNT(ID) FROM $db_table_inform_me GROUP BY IDitem"); //grupuje wg iditem
  2. $c_row = mysql_fetch_row($c_rows);
  3. $count_rows = $c_row[0];
  4. $query = mysql_query("SELECT ID, IDitem FROM $db_table_inform_me GROUP BY IDitem ORDER BY Date_start DESC LIMIT $od, $showrows");//tutaj powinien byc wpis o ORDER BY max DATA (?)


  1. $query = mysql_query("SELECT ID, IDitem FROM $db_table_inform_me GROUP BY IDitem ORDER BY MAX (Date_start) DESC LIMIT $od, $showrows");
nie dziala nie wiem po prostou jakby to mialo wygladac :/ przerpaszam
dr_bonzo
1. Daj SQLa tworzacego baze i kilka danych -- to bede mogl potestowac u siebie
2.

  1. SELECT ID, IDitem FROM $db_table_inform_me GROUP BY IDitem ORDER BY MAX (Date_start) DESC LIMIT $od, $showrows


brakuje COUNT()'a w SELEKCie
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.