Autor Zpráva
liquidfunk
Profil *
Mám tabulku (id, od, do, info) a potřeboval bych vypsat seznam datumů odpovídající rozsah, bez toho, aby se záznamy opakovaly. Poradil by někdo, jestli se dá výběr udělat pomocí SELECTU, nebo je potřeba použít PHP?

Příklad
2012-09-21 2012-09-24
2012-09-20 2012-09-23
2012-09-23 2012-09-25
2012-09-28 2012-09-28

Výsledek výpisu
2012-09-21
2012-09-22
2012-09-23
2012-09-24
2012-09-25
2012-09-28
liquidfunk
Profil *
* Používám databázi MySQL 5.5.
Taps
Profil
liquidfunk:
pokud by se jednalo o datumy v jednom sloupečku tak řešení by bylo následující
select * from knihy where od between 2012-09-21 and 2012-09-28 group by od
liquidfunk
Profil *
Jde o to, že potřebuji vypsat interval jednotlivých datumů, které se mohou vzájemně překrývat.

Zatím jsem zkoušel něco takového, ale nevím si s tím rady:
SELECT DISTINCT * FROM `item_dates` WHERE CURDATE() BETWEEN `date_from` AND `date_to` ORDER BY `row_number`
liquidfunk
Profil *
Tak SELECT se mi nepodařil, zkouším vypsat data přes PHP. Potřeboval bych poradit, jak ošetřit nevypisování stejných dat.

function getDatesList($startTime, $endTime) {
$format = 'Y-m-d';
$startTime = strtotime($startTime);
$endTime = strtotime($endTime);
$numDays = round(($endTime - $startTime) / 86400) + 1;
$days = array();

for ($i = 0; $i < $numDays; $i++) {
$days[] = date($format, ($startTime + ($i * 86400)));
}
return $days;
}


while($row = mysql_fetch_array($result)) {

$date_from = $row['date_from'];
$date_to = $row['date_to'];

$days = getDatesList($date_from, $date_to);

foreach($days as $key => $value){
echo $value . '<br />';
}

Výsledek
2012-09-19
2012-09-20
2012-09-21
2012-09-20
2012-09-21
2012-09-22
2012-09-23
2012-09-21
2012-09-22
2012-09-23
2012-09-24
2012-09-22
2012-09-23
2012-09-24
2012-09-25
2012-09-28
2012-09-29
2012-09-30

Záznamy z DB (od - do)
2012-09-19 2012-09-21
2012-09-20 2012-09-23
2012-09-21 2012-09-24
2012-09-22 2012-09-22
2012-09-23 2012-09-25
2012-09-28 2012-09-30
Taps
Profil
liquidfunk:
Nejčastější potíže s PHP (FAQ) » Nadpis skupiny nejen při výpisu z databáze

Vaše odpověď


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm:

0