• 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
97 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 (454,620 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 (454,620 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 (454,620 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 203 wizyt
pytanie zadane 7 czerwca 2015 w PHP, Symfony, Zend przez Dawid Warduliński Obywatel (1,830 p.)
+3 głosów
1 odpowiedź 209 wizyt
pytanie zadane 10 listopada 2016 w Sprawy forum przez Boshi VIP (100,720 p.)
0 głosów
1 odpowiedź 188 wizyt
Porady nie od parady
Zadając pytanie postaraj się o poprawną pisownię i czytelne formatowanie tekstu.Kompozycja

63,313 zapytań

109,570 odpowiedzi

228,885 komentarzy

43,980 pasjonatów

Przeglądających: 274
Pasjonatów: 16 Gości: 258

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.

...