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]
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ą?
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?
GROUP_CONCAT(d.domain_end ORDER BY d.domain_end SEPARATOR '<hr>') AS domain_ends
No juz zapytanie jest zbedne jak dostales od nas wyjasnienie co jest zle.
Czy jest jakiś inny sposób na porównywanie rekordów przy użyciu GROUP_CONCAT ?
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.
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
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?
jeżeli nie nie użyje group_concat dla d.domain_end to wynikiem będzie tylko jeden rekord.
"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");
Bo grupujesz po p.id. Tak działa zapytanie.
Zamiast grupować w zapytaniu, wyciągnij normalnie rekordy i pogrupuj je w PHP.
@trueblue juz mu to pisalem w tym temacie
http://forum.php.pl/index.php?showtopic=267449&st=0&p=1248952&#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
Próbowałem przy użyciu explode, jednak utknąłem w miejscu ponieważ nie wiem jak dalej zrobić warunek aby sprawdzał poszczególny rekord.
Nie odpowiedziales na zadane wczesniej pytanie:
czy wszystkie daty maja spelniac warunek czy tylko jedna. To bardzo istotne pytanie
Tak wszystkie daty
No to wrzucasz to w petle i jedziesz
$oneYearOn3 = http://www.php.net/date('Y-m-d'); $ok = true; foreach ($twojaTablica as $end) { if (($end>=$oneYearOn2)) { $ok = false; } } if ($ok) { http://www.php.net/echo '<td class="box_small_red" data-column="Ważność domeny"><div class="box_admin">'.$row["domain_ends"].'</div></td>'; } else { http://www.php.net/echo '<td class="box_small_green" data-column="Ważność domeny"><div class="box_admin">'.$row["domain_ends"].'</div></td>'; }
$oneYearOn3 = http://www.php.net/date('Y-m-d'); foreach ($twojaTablica as $end) { if (($end<$oneYearOn2)) { http://www.php.net/echo '<td class="box_small_red" data-column="Ważność domeny"><div class="box_admin">'.$end.'</div></td>'; } else { http://www.php.net/echo '<td class="box_small_green" data-column="Ważność domeny"><div class="box_admin">'.$end.'</div></td>'; } }
Dziękuje za pomoc kod działa jednak nie do końca tak jak chce, ponieważ mi zalezy na tym
wyświetlało tylko dany rekord który spełnia ten wymóg a nie wszystkie daty.
if ($ok)
zobacz moja edycje z poprzednieg posta
$oneYearOn3 = date('Y-m-d'); foreach ($twojaTablica AS $end) { IF (($end<$oneYearOn2)) { echo '<td class="box_small_red" data-column="Ważność domeny"><div class="box_admin">'.$end.'</div></td>'; } else { echo '<td class="box_small_green" data-column="Ważność domeny"><div class="box_admin">'.$end.'</div></td>'; } }
No nie. Kod po edycji ma warunek i wyswietlanie dla kazdej daty oddzielnie
Poniżej przesyłam kod
<?php http://www.php.net/session_start(); if (!http://www.php.net/isset($_SESSION['logged'])) { http://www.php.net/header('Location: index.php'); http://www.php.net/exit(); } else { if ($_SESSION['user']=='admin') { require_once "connect.php"; $connect = @new mysqli($host, $db_user, $db_password, $db_name); $result = $connect->query("Select p.name, (Select GROUP_CONCAT(e.adres_email order by d.domain_end SEPARATOR '<hr>') from email e where e.id_person=p.id) as adres_email, GROUP_CONCAT(d.domain_price+d.staff+d.serwer+d.positioning+d.media order by d.domain_end SEPARATOR ' zł <hr>') as domain_prices, GROUP_CONCAT(d.domain_end order by d.domain_end SEPARATOR '<br>') 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"); } else { http://www.php.net/header('Location: panel.php'); }} ?> <!DOCTYPE HTML> <html lang="pl"> <head> </head> <body id="admin"> <div class="header"> </div> <div class="content"> <section class="jumpers"> <div class="row"> <table> <thead> </thead> <tbody> <?php if($result->num_rows > 0) { while($row = $result->fetch_assoc()) { ?> <tr class="admin"> <?php $oneYearOn3 = http://www.php.net/date('Y-m-d'); $oneYearOn= http://www.php.net/date('Y-m-d', http://www.php.net/strtotime($row["domain_ends"])); $pieces3= http://www.php.net/explode(',',$row["domain_ends"]); $oneYearOn3 = http://www.php.net/date('Y-m-d'); foreach ($pieces3 as $end) { if (($end<$oneYearOn3)) { http://www.php.net/echo '<td class="box_small_red" data-column="Ważność domeny"><div class="box_admin">'.$end.'</div></td>'; } else { http://www.php.net/echo '<td class="box_small_green" data-column="Ważność domeny"><div class="box_admin"><font color=red>'.$end.'</font></div></td>'; } } ?> </tr> <?php }} ?> </tbody></table></div> </div></section></div> </body> </html>
Masakra jakas....
laczysz DATY przy pomocy <BR> a potem radosnie oddzielasz po PRZECINKU... Nawet nie raczyles spojrzec co ci explode zwraca :/ No szanuj troche czas innych
faktycznie przeoczyłem zapytanie sql, poprawiłem zapytanie i teraz wszystko działa
Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)