Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> Wyciąganie danych z bazy a PHPmailer
ufo1990
post
Post #1





Grupa: Zarejestrowani
Postów: 84
Pomógł: 0
Dołączył: 26.07.2019

Ostrzeżenie: (0%)
-----


Wyciągam z bazy poniższym zapytaniem użytkowników, którzy mają dane usługi. Czasem się zdarza że dany użytkownik ma kilka usług. Następnie robię pętle, w której finalnie wysyłana jest wiadomość do każdego z użytkowników jakie ma usługi. Poniższy kod ma jedną wadę ponieważ jeżeli użytkownik ma np. 3 usługi to otrzyma 3 e-maile z każdą usługą. Próbowałem zmienić zapytanie SQL dodając DISTINCT, następnie w pętli for zrobiłem foreach i teraz dany użytkownik faktycznie otrzymuje w jednym e-mailu informacje o wszystkich swoich usługach.

Problem pojawia się kiedy np. w bazie jest dwóch użytkowników to każdy z nich otrzyma informacje o wszystkich usługach, nie koniecznie o swoich więc nie wiem jak w pętli foreach przypisać usługi do danego użytkownika.

  1. SELECT Group_concat(p.email SEPARATOR ',') AS emails, Group_concat(s.service_name SEPARATOR ',') AS service_names FROM services s RIGHT JOIN persons p ON s.id_p = p.id


  1. $email_explode = explode(',',$row['emails']);
  2. for($i=0; $i<count($email_explode); $i++)
  3. $mail -> AddAddress($email_explode[$i]);


Ten post edytował ufo1990 27.03.2022, 08:42:48
Go to the top of the page
+Quote Post
trueblue
post
Post #2





Grupa: Zarejestrowani
Postów: 6 806
Pomógł: 1828
Dołączył: 11.03.2014

Ostrzeżenie: (0%)
-----


Zamiast kombinować z GROUP_CONCAT, stwórz zapytanie wybierające email oraz nazwę usługi.
Następnie w PDO jest opcja trybu pobierania o nazwie PDO::FETCH_GROUP, będziesz miał pogrupowane nazwy usług per email.
Go to the top of the page
+Quote Post
Salvation
post
Post #3





Grupa: Zarejestrowani
Postów: 403
Pomógł: 72
Dołączył: 15.07.2014

Ostrzeżenie: (0%)
-----


A jak to masz połączone w bazie? UserId <> ServiceId? To przecież możesz pogrupować to po UserId i dostaniesz listę ServicesIds.
Go to the top of the page
+Quote Post
ufo1990
post
Post #4





Grupa: Zarejestrowani
Postów: 84
Pomógł: 0
Dołączył: 26.07.2019

Ostrzeżenie: (0%)
-----


Pogrupowie według UserId to jest rozwiązanie połowiczne ponieważ w query mam jeszcze takie zapytanie
  1. Group_concat(s.service_price SEPARATOR ',') as service_prices
więc później będzie problem z explode żeby zrobić np. warunek >0
Go to the top of the page
+Quote Post
nospor
post
Post #5





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




w kodzie co pokazales nigdzie nie masz warunku > 0 wiec o co ci chodzi?
To co napisali poprzednicy to wszystko jest ok. Cos kombinujesz za bardzo
Go to the top of the page
+Quote Post
ufo1990
post
Post #6





Grupa: Zarejestrowani
Postów: 84
Pomógł: 0
Dołączył: 26.07.2019

Ostrzeżenie: (0%)
-----


ok, faktycznie za mało informacji więc jeszcze raz mam zapytanie, w którym dodałem grupowanie
  1. SELECT Group_concat(p.email SEPARATOR ',') AS emails, Group_concat(s.service_name SEPARATOR ',') AS service_names, Group_concat(s.service_price SEPARATOR ',') AS service_prices FROM services s RIGHT JOIN persons p ON s.id_p = p.id GROUP BY p.id


Następnie w pętli mam $service_prices_explode = explode(',',$row['service_prices']); i chce zrobić warunek if($service_prices_explode>) echo $row['name']; ale jest problem ponieważ echo $row['service_prices']; nie zwróci całego ciągu udzielonego przecinkami.

Ten post edytował ufo1990 28.03.2022, 11:15:47
Go to the top of the page
+Quote Post
nospor
post
Post #7





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




Ale chaotycznie to opisujesz wszystko

Co to jest
if($service_prices_explode>) echo $row['name'];
?
Co to ma robic?
Go to the top of the page
+Quote Post
ufo1990
post
Post #8





Grupa: Zarejestrowani
Postów: 84
Pomógł: 0
Dołączył: 26.07.2019

Ostrzeżenie: (0%)
-----


W dużym skrócie: Z bazy wyciągam userów którzy mają określone usługi do których jest przypisana jakaś kwota, następnie chce wyświetlić tylko tych użytkowników których jedna z usług ma wartość większą niż 0.
Go to the top of the page
+Quote Post
nospor
post
Post #9





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




Po to jest HAVING

..... GROUP BY p.id HAVING SUM(s.service_price) > 0
Go to the top of the page
+Quote Post
ufo1990
post
Post #10





Grupa: Zarejestrowani
Postów: 84
Pomógł: 0
Dołączył: 26.07.2019

Ostrzeżenie: (0%)
-----


Jakie to proste (IMG:style_emoticons/default/facepalmxd.gif) Cały czas się skupiałem żeby obrobić to w php a wystarczyło tylko zapytanie zmodyfikować. Dzięki za pomoc.
Go to the top of the page
+Quote Post
nospor
post
Post #11





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




Nastepnym razem proponuje od razu tez opisac co tak naprawde chcesz osiagnac, a nie opisujesz droge ktora ci sie wydaje ze jest wlasciwa. Zaoszczedzisz sobie i nam duzo czasu
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 22.08.2025 - 19:35