• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Prywatne wiadomości ciąg dalszy

+1 głos
100 wizyt
pytanie zadane 17 czerwca 2015 w PHP, Symfony, Zend przez Dawid Warduliński Obywatel (1,830 p.)

Witam robię system wiadomości prywatnych mam już wyświetlanie wiadomości otrzymanych ale nie mogę dodać widomości wysłanych do tego urzytkownika.

struktura mysql http://wklej.to/q7fuV 

 

SELECT user.login, user.premium, user.id, user.imie, img.id_user, img.img_adres, message.id_user_m, message.id, message.tresc, message.odczyt, message.data_wyslania FROM user, message, img WHERE user.id = message.id_user && user.id = message.id_user_m && user.id = img.id_user && user.ban = 0 && img.profil=1 && message.id_user_m = 2 && message.id_user = 3 ORDER BY `message`.`data_wyslania` ASC

 

 

1 odpowiedź

+2 głosów
odpowiedź 17 czerwca 2015 przez Comandeer Mentor (459,040 p.)
edycja 17 czerwca 2015 przez Comandeer

Zamiast iloczynu kartezjańskiego polecam stosować JOIN z warunkami w ON - wówczas zapytanie stanie się bardziej czytelne. No i w teorii bardziej wydajne ;)

Wyciąganie korespondencji między userami polega na sprawdzaniu par nadawca-odbiorca, zatem jeśli chcemy wyciągnąć korespondencję dla pary userów o id 2 i 3 to musimy sprawdzić dwa warunki: 2 jest nadawcą a 3 odbiorcą oraz 3 jest nadawcą a 2 odbiorcą

((message.id_user_m = 3 AND message.id_user = 2) OR (message.id_user_m = 2 AND message.id_user = 3))

W Twoim zapytaniu dodatkowo jest warunek, który nie może zostać spełniony: 

user.id = message.id_user && user.id = message.id_user_m

To zadziałałoby tylko wówczas, gdyby user prowadził korespondencję z samym sobą ;)

Jeśli się chce pobrać dane dla obydwu userów równocześnie to warto skorzystać z możliwości łączenia tych samych tabel przy użyciu aliasów:

SELECT users.name, usersm.name as namem FROM users
JOIN users AS usersm
WHERE users.id != usersm.id

Ostatecznie powstał mi taki potwór: 

SELECT 
user.login, user.premium, user.id, user.imie,
userm.login AS loginm, userm.premium AS premiumm, userm.id AS idm, user.imie AS imiem,
img.img_adres,
imgm.img_adres AS img_adresm,
message.id_user_m, message.id, message.tresc, message.odczyt, message.data_wyslania 
FROM user
JOIN message
ON message.id_user = user.id
JOIN user AS userm
ON message.id_user_m = userm.id
JOIN img 
ON img.id_user = user.id
JOIN img AS imgm
ON imgm.id_user = userm.id
WHERE (user.ban = 0 AND userm.ban = 0) 
AND (img.profil = 1 AND imgm.profil = 1)
AND 
((message.id_user_m = 3 AND message.id_user = 2) OR (message.id_user_m = 2 AND message.id_user = 3))
GROUP BY `message`.`id`
ORDER BY `message`.`data_wyslania` ASC

Coś zwraca ;) i na oko nawet w miarę sensownie, ale to musisz już sprawdzić we własnym zakresie.

komentarz 17 czerwca 2015 przez Dawid Warduliński Obywatel (1,830 p.)

Uf w końcu a takie pytanie jak np po przesunąć wiadomość odemnie będzie z lewej strony, ja wyświetlam tak

if (mysqli_num_rows($wynik) > 0) {

	while ($row = mysqli_fetch_assoc($wynik)) {
		echo $row['login'] .'<br />';
		echo "<img src='" . $row['img_adres'] . "' width='50' height='50' style='border-radius: 50px'><br />";
		echo $row['tresc'] . '<br /><br />';

	}
}

 

komentarz 17 czerwca 2015 przez Comandeer Mentor (459,040 p.)
Pewnie to zmęczenie materiału, ale nie rozumiem o co mnie pytasz… Możesz to jakoś lepiej wyłuszczyć?
komentarz 18 czerwca 2015 przez Dawid Warduliński Obywatel (1,830 p.)
teraz wyświetla się jeden pod drugim jak dać to co ja wysyłam nap z prawej strony jak na małym czacie fb
komentarz 18 czerwca 2015 przez Comandeer Mentor (459,040 p.)

Sprawdź w którym polu znajduje się Twoje id usera i dodaj odpowiednią klasę, która nada tej wiadomości float: right

Podobne pytania

0 głosów
4 odpowiedzi 208 wizyt
pytanie zadane 7 czerwca 2015 w PHP, Symfony, Zend przez Dawid Warduliński Obywatel (1,830 p.)
+3 głosów
1 odpowiedź 210 wizyt
pytanie zadane 10 listopada 2016 w Sprawy forum przez Boshi VIP (100,720 p.)
0 głosów
1 odpowiedź 261 wizyt
Porady nie od parady
Komentarze do pytań nie służą do odpowiadania, od tego jest wydzielona sekcja odpowiedzi. Funkcją komentarzy jest natomiast możliwość uzyskania dodatkowych informacji na temat samego posta.Komentarze

65,755 zapytań

112,393 odpowiedzi

237,319 komentarzy

46,700 pasjonatów

Przeglądających: 120
Pasjonatów: 2 Gości: 118

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto dwie polecane książki warte uwagi. Pełną listę znajdziesz tutaj.

...