Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [MySQL][PHP]While bez powtórzeń tych samych wartości
Forum PHP.pl > Forum > Przedszkole
tinware
Witajcie.

Do każdego elementu na stronie użytkownicy piszą komentarze i po zapisaniu chce wyslac powiadomienie ze przy elemencie ktory ktos juz komentowal pojawil sie nowy komentarz. W tym celu losuje ID użytkownikow, ktorzy komentowali dany element...

Cytat
1000003
1000003
1000002
1000003
1000002
1000003
1000003
1000003


Problem pojawia się, kiedy ktoś komentował więcej niż jeden raz, bo podczas losowania pojawia się na liście więcej niż jeden raz, czyli to samo powiadomienie zostanie mu wyslane tyle razy, ile razy komentował dany element... Chodzi mi o to, żeby wylosowało te ID bez powtórzeń.

Oto mój kod:
  1. $lista_kom = mysql_query ("SELECT * FROM Comments WHERE dzial='Photos' and dzial_id='42' and osoba!='1000001' ORDER by id;");
  2. $ile_lista_kom = mysql_num_rows($lista_kom);
  3.  
  4. while ($rekord = mysql_fetch_assoc ($lista_kom))
  5. {
  6. echo " ".$rekord['osoba']." <br>";
  7. }

W zapytaniu narazie nan podpięte wszystko na "sztywno".
dzial to rodzaj elementu
dzial_id to wybrane zdjecie
osoba! to kazdy wylosowany uzytkownik oprocz wlasnego ID (po co powiadamiać samego siebie:P)

Mam problem, bo nie w pętli sobie z tym poradziłem:

  1. $result = mysql_query("SELECT COUNT(*) AS ile, GROUP_CONCAT(DISTINCT osoba ORDER BY osoba SEPARATOR ', ') AS osoby
  2. FROM Comments WHERE dzial='Photos' and dzial_id='42'");
  3.  
  4.  
  5. if ($result)
  6. {
  7. $row = mysql_fetch_assoc($result);
  8.  
  9. if (strlen($row['osoby']) > 0)
  10. {
  11. echo '' . htmlspecialchars($row['osoby']) . '';
  12. }
  13.  
  14. }


Ale to niestety musi być w pętli do rozesłania wiadomości, i niewiem jak się za to zabrać.

Rodacy, pomożecie smile.gif ?
Shili
Wybierz tylko id osoby po SELECT i użyj słowa klucza DISTINCT
tinware
Coś takiego ?
  1. $lista_kom = mysql_query ("SELECT osoba GROUP_CONCAT(DISTINCT osoba ORDER BY osoba) FROM Comments WHERE dzial='Photos' and dzial_id='42' and osoba!='1000001' ORDER by id;");


I otrzymałem wynik:
  1. Warning: mysql_num_rows() expects parameter 1 to be resource, boolean given in C:\Program Files\EasyPHP-5.3.8.1\www\djplate2012\kombinacje.php on line 32
  2.  
  3. Warning: mysql_fetch_assoc() expects parameter 1 to be resource, boolean given in C:\Program Files\EasyPHP-5.3.8.1\www\djplate2012\kombinacje.php on line 34
Sephirus
ojojoj

  1. $lista_kom = mysql_query ("SELECT DISTINCT id FROM Comments WHERE dzial='Photos' and dzial_id='42' and osoba!='1000001' ORDER by id;");
  2. $ile_lista_kom = mysql_num_rows($lista_kom);
  3.  
  4. while ($rekord = mysql_fetch_assoc ($lista_kom))
  5. {
  6. echo " ".$rekord['osoba']." <br>";
  7. }


wink.gif to wystarczy

DISTINCT wstawione w SELEKCIE przed nazwą kolumny wymusza pobieranie tej kolumny bez powtórzeń po prostu smile.gif
tinware
Jeszcze mały błąd być:
Cytat
("SELECT DISTINCT osoba FROM Comments ...


No i dziękuje... podziękowałem już za pomoc smile.gif
a osobiscie jeszcze raz dziękuje.
Pozdrawiam

TOPIC OFF !
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.