• 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

VPS Starter Arubacloud
+1 głos
320 wizyt
pytanie zadane 17 czerwca 2015 w PHP 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 Guru (599,730 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 Guru (599,730 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 Guru (599,730 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 477 wizyt
pytanie zadane 7 czerwca 2015 w PHP przez Dawid Warduliński Obywatel (1,830 p.)
+3 głosów
1 odpowiedź 345 wizyt
pytanie zadane 10 listopada 2016 w Sprawy forum przez Boshi VIP (100,240 p.)
0 głosów
1 odpowiedź 211 wizyt
pytanie zadane 26 kwietnia 2023 w Offtop przez ernesto3000 Nowicjusz (120 p.)

92,455 zapytań

141,263 odpowiedzi

319,099 komentarzy

61,854 pasjonatów

Motyw:

Akcja Pajacyk

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

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Akademia Sekuraka 2024 zapewnia dostęp do minimum 15 szkoleń online z bezpieczeństwa IT oraz dostęp także do materiałów z edycji Sekurak Academy z roku 2023!

Przy zakupie możecie skorzystać z kodu: pasja-akademia - użyjcie go w koszyku, a uzyskacie rabat -30% na bilety w wersji "Standard"! Więcej informacji na temat akademii 2024 znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...