Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

2 Stron V   1 2 >  
Reply to this topicStart new topic
> [PHP]GROUP_CONCAT a warunek dla rekordu
inomi13
post 19.02.2020, 12:06:06
Post #1





Grupa: Zarejestrowani
Postów: 95
Pomógł: 0
Dołączył: 16.08.2017

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


Używam GROUP_CONCAT aby połączyć rekordy z dwóch tabel. Ustawiłem poniższy warunek. Jednak w sytuacji kiedy jest więcej niż 1 rekord to poniższe zapytanie nie działa. Proszę o pomoc jak rozwiązać problem.

$oneYearOn3 = date('Y-m-d');
if (($row["domain_ends"]<$oneYearOn2))
{
echo '<td class="box_small_red" data-column="Ważność domeny"><div class="box_admin">'.$row["domain_ends"].'</div></td>';
}
else
{
echo '<td class="box_small_green" data-column="Ważność domeny"><div class="box_admin">'.$row["domain_ends"].'</div></td>';
}
[/php]

Go to the top of the page
+Quote Post
nospor
post 19.02.2020, 12:09:10
Post #2





Grupa: Moderatorzy
Postów: 36 440
Pomógł: 6290
Dołączył: 27.12.2004




Cytat
to poniższe zapytanie nie działa
Nie podales zadnego zapytania tutaj


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
trueblue
post 19.02.2020, 12:10:10
Post #3





Grupa: Zarejestrowani
Postów: 6 761
Pomógł: 1822
Dołączył: 11.03.2014

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


Więcej niż jeden rekord, który wpada do grupy łączonej poprzez GROUP_CONCAT, tak?
Jak ma więc działać, skoro wynikiem jest kilka dat połączonych w jeden string, a Ty porównujesz całość z datą?


--------------------
Go to the top of the page
+Quote Post
nospor
post 19.02.2020, 12:10:38
Post #4





Grupa: Moderatorzy
Postów: 36 440
Pomógł: 6290
Dołączył: 27.12.2004




poza tym, moja szklana kula mowi ze:

twoj warunek wyglada tak
data1,data2<$oneYearOn2

Wiec niby jakim cudem daty oddzielone przecinkiem (czy czym ty je tam laczysz w GROUP_CONCAT) maja byc od czegos mniejsze/wieksze?


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
inomi13
post 19.02.2020, 12:16:37
Post #5





Grupa: Zarejestrowani
Postów: 95
Pomógł: 0
Dołączył: 16.08.2017

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


  1. GROUP_CONCAT(d.domain_end ORDER BY d.domain_end SEPARATOR '<hr>') AS domain_ends
Go to the top of the page
+Quote Post
nospor
post 19.02.2020, 12:53:30
Post #6





Grupa: Moderatorzy
Postów: 36 440
Pomógł: 6290
Dołączył: 27.12.2004




No juz zapytanie jest zbedne jak dostales od nas wyjasnienie co jest zle.


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
inomi13
post 20.02.2020, 08:48:32
Post #7





Grupa: Zarejestrowani
Postów: 95
Pomógł: 0
Dołączył: 16.08.2017

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


Czy jest jakiś inny sposób na porównywanie rekordów przy użyciu GROUP_CONCAT ?
Go to the top of the page
+Quote Post
trueblue
post 20.02.2020, 09:24:18
Post #8





Grupa: Zarejestrowani
Postów: 6 761
Pomógł: 1822
Dołączył: 11.03.2014

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


Najpierw musisz odpowiedzieć sobie na pytanie jaką informację chcesz wyświetlić, kiedy jedna data w grupie będzie wygasać, a pozostałe nie (lub odwrotnie).

Możesz albo rozdzielić grupę w PHP i sprawdzać każdą datę z osobna, albo sprawdzić ważność dla grupy (na podstawie warunku j.w.) już w samym zapytaniu.


--------------------
Go to the top of the page
+Quote Post
inomi13
post 21.02.2020, 11:01:46
Post #9





Grupa: Zarejestrowani
Postów: 95
Pomógł: 0
Dołączył: 16.08.2017

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


W dużym skrócie posiadam w bazie danych tabele osoby, tabele domeny i tabelę adresy e-mail. Jedna osoba może mieć np. dwie domeny i 6 adresów e-mail przypisanych do danej domeny. W jaki sposób mogę rozdzielić wynik z zapytania GROUP_CONCAT tak abym mógł zrobić konkretne warunki
Go to the top of the page
+Quote Post
trueblue
post 21.02.2020, 11:14:08
Post #10





Grupa: Zarejestrowani
Postów: 6 761
Pomógł: 1822
Dołączył: 11.03.2014

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


Dla każdej daty z osobna będziesz robił warunek?
Jeśli tak, to po co w ogóle sklejasz daty w jeden ciąg?


--------------------
Go to the top of the page
+Quote Post
inomi13
post 21.02.2020, 11:24:07
Post #11





Grupa: Zarejestrowani
Postów: 95
Pomógł: 0
Dołączył: 16.08.2017

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


jeżeli nie nie użyje group_concat dla d.domain_end to wynikiem będzie tylko jeden rekord.

  1.  
  2. "Select p.name, (Select GROUP_CONCAT(e.adres_email SEPARATOR '<hr>') from email e where e.id_person=d.id_person) as adres_email, GROUP_CONCAT(d.domain_end order by d.domain_end SEPARATOR '<hr>') as domain_ends, group_concat(d.domain_name order by d.domain_end SEPARATOR '<hr>') as domain_names from persons p left join domains d on p.id=d.id_person WHERE p.id != 1 group by p.id");
Go to the top of the page
+Quote Post
trueblue
post 21.02.2020, 12:01:25
Post #12





Grupa: Zarejestrowani
Postów: 6 761
Pomógł: 1822
Dołączył: 11.03.2014

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


Bo grupujesz po p.id. Tak działa zapytanie.
Zamiast grupować w zapytaniu, wyciągnij normalnie rekordy i pogrupuj je w PHP.


--------------------
Go to the top of the page
+Quote Post
nospor
post 21.02.2020, 12:09:21
Post #13





Grupa: Moderatorzy
Postów: 36 440
Pomógł: 6290
Dołączył: 27.12.2004




@trueblue juz mu to pisalem w tym temacie
http://forum.php.pl/index.php?showtopic=26...p;#entry1248952

Ale to nie ma znaczenia czy on to grupuje czy nie. Jak grupuje to niech zrobi zwykle EXPLODE i tez bedzie mial tablice. Oba przypadki dadza ten sam efekt: tablice dat. Nie ma znaczenia jak do tego dojdzie


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
inomi13
post 21.02.2020, 13:12:04
Post #14





Grupa: Zarejestrowani
Postów: 95
Pomógł: 0
Dołączył: 16.08.2017

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


Próbowałem przy użyciu explode, jednak utknąłem w miejscu ponieważ nie wiem jak dalej zrobić warunek aby sprawdzał poszczególny rekord.
Go to the top of the page
+Quote Post
nospor
post 21.02.2020, 13:18:47
Post #15





Grupa: Moderatorzy
Postów: 36 440
Pomógł: 6290
Dołączył: 27.12.2004




Nie odpowiedziales na zadane wczesniej pytanie:
czy wszystkie daty maja spelniac warunek czy tylko jedna. To bardzo istotne pytanie


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
inomi13
post 21.02.2020, 13:22:42
Post #16





Grupa: Zarejestrowani
Postów: 95
Pomógł: 0
Dołączył: 16.08.2017

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


Tak wszystkie daty
Go to the top of the page
+Quote Post
nospor
post 21.02.2020, 14:50:43
Post #17





Grupa: Moderatorzy
Postów: 36 440
Pomógł: 6290
Dołączył: 27.12.2004




No to wrzucasz to w petle i jedziesz

  1. $oneYearOn3 = date('Y-m-d');
  2. $ok = true;
  3.  
  4. foreach ($twojaTablica as $end) {
  5. if (($end>=$oneYearOn2)) {
  6. $ok = false;
  7. }
  8. }
  9.  
  10. if ($ok)
  11. {
  12. echo '<td class="box_small_red" data-column="Ważność domeny"><div class="box_admin">'.$row["domain_ends"].'</div></td>';
  13. }
  14. else
  15. {
  16. echo '<td class="box_small_green" data-column="Ważność domeny"><div class="box_admin">'.$row["domain_ends"].'</div></td>';
  17. }


edit: czekaj, nie zwrocilem na zawartosc tego co potem w IF masz.
To wiec raczej powinno wygladac tak

  1. $oneYearOn3 = date('Y-m-d');
  2. foreach ($twojaTablica as $end) {
  3. if (($end<$oneYearOn2))
  4. {
  5. echo '<td class="box_small_red" data-column="Ważność domeny"><div class="box_admin">'.$end.'</div></td>';
  6. }
  7. else
  8. {
  9. echo '<td class="box_small_green" data-column="Ważność domeny"><div class="box_admin">'.$end.'</div></td>';
  10. }
  11. }


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
inomi13
post 21.02.2020, 14:51:59
Post #18





Grupa: Zarejestrowani
Postów: 95
Pomógł: 0
Dołączył: 16.08.2017

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


Dziękuje za pomoc kod działa jednak nie do końca tak jak chce, ponieważ mi zalezy na tym
  1. if ($ok)
wyświetlało tylko dany rekord który spełnia ten wymóg a nie wszystkie daty.
Go to the top of the page
+Quote Post
nospor
post 21.02.2020, 14:53:21
Post #19





Grupa: Moderatorzy
Postów: 36 440
Pomógł: 6290
Dołączył: 27.12.2004




zobacz moja edycje z poprzednieg posta


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
inomi13
post 21.02.2020, 15:00:30
Post #20





Grupa: Zarejestrowani
Postów: 95
Pomógł: 0
Dołączył: 16.08.2017

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


  1. $oneYearOn3 = date('Y-m-d');
  2. foreach ($twojaTablica AS $end) {
  3. IF (($end<$oneYearOn2))
  4. {
  5. echo '<td class="box_small_red" data-column="Ważność domeny"><div class="box_admin">'.$end.'</div></td>';
  6. }
  7. else
  8. {
  9. echo '<td class="box_small_green" data-column="Ważność domeny"><div class="box_admin">'.$end.'</div></td>';
  10. }
  11. }


Twoje zapytanie działa kiedy wszystkie rekordy spełniają warunek. Natomiast ja potrzebuje czegoś innego tzn. jeżeli jedna z dat spełnia warunek to np. zmienia się jej kolor na box czerwony, a reszta dat zmienia kolor zielony.
Go to the top of the page
+Quote Post

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

 



RSS Wersja Lo-Fi Aktualny czas: 28.03.2024 - 14:12