Beste leden,

Graag zou ik records van vandaag en 31 dagen later willen zien.
Dat is gelukt met de volgende sql query:
SELECT * FROM `table` WHERE date >= CURDATE()
AND date < CURDATE() + INTERVAL 31 DAY

Nu zou ik deze query willen combineren met een andere query,
omdat in deze query alle rows van de datum laat zien.

<?php
include 'db.php';
$db = new DB();
$users = $db->getRows('table',array('order_by'=>'date ASC')); if(!empty($users)){ $count = 0;
foreach($users as $user){ $count++;
?>

Config database file(db.php)

public function getRows($table,$conditions = array()){

$sql = 'SELECT ';
$sql .= array_key_exists("select",$conditions)?$conditions['select']:'*';
$sql .= ' FROM '.$table;


if(array_key_exists("where",$conditions)){
$sql .= ' WHERE ';
$i = 0;

foreach($conditions['where'] as $key => $value){
$pre = ($i > 0)?' AND ':'';
$sql .= $pre.$key." = '".$value."'";
$i++;
}
}

De andere query is bedoelt voor het zoeken van een sport (bijvoorbeeld voetbal)

Dus dan gaat het om de query van het laden van de gegevens en bij het zoeken van een sport, met het doel dat de pagina de rows vandaag toont en 31 dagen later.

Graag hoor ik van jullie,

Met vriendelijke groet,

Levy van der Meijden
Dat klopt, maar dat is alleen bij het laden van de records.
Nu bij het filteren, filtert hij echt specifiek bijvoorbeeld voetbal.



[size=xsmall]Toevoeging op 17/03/2019 17:18:29:[/size]

$users = $db->getRows($tblName,$conditions,array(
'order_by'=>'date ASC',
'where' => 'date >= CURDATE() AND date < CURDATE() + INTERVAL 365 DAY'
));

Maar dan worden alsnog alle resultaten van een sport (voetbal) weergegeven.
Volgens mij is het mogelijk om de $conditions aan te passen, maar ik weet niet hoe.
1. date is een gereserveerd woord. Om het te gebruiken moet je ze tussen die ticks plaatsen. Zonder lukt niet.

2. Hier een kunstgreep om de datumbereik te kiezem. Aanpassen in de db class waar 'where' wordt bepaald.

		if( array_key_exists( "where", $conditions ) )
		{
			$where = " AND `date` >= CURDATE() AND `date` < CURDATE() + INTERVAL 31 DAY";
			$sql .= ' WHERE ';
			$i = 0;
			foreach( $conditions['where'] as $key => $value )
			{
				$pre = ($i > 0)?' AND ':'';
				$sql .= $pre . $key . " LIKE '%" . $value . "%'";
				$i++;
			}
			$sql .= $where;
		}




[size=xsmall]Toevoeging op 17/03/2019 18:23:47:[/size]

Nieuwe oplossing :

Voeg deze nieuwe condition op de aangegeven plek in getData.php

// nieuwe condition
$conditions['bereik'] = " AND `date` >= CURDATE() AND `date` < CURDATE() + INTERVAL 31 DAY";

$users = $db->getRows( $tblName, $conditions );


Vervang in het database class bestand in function getRows() de eerder opgegeven oplossing met dit :

if( array_key_exists( "where", $conditions ) )
{
	$sql .= ' WHERE ';
	$i = 0;
	foreach( $conditions['where'] as $key => $value )
	{
		$pre = ($i > 0)?' AND ':'';
		$sql .= $pre . $key . " LIKE '%" . $value . "%'";
		$i++;
	}
	
	// dit is  nieuw
	if( array_key_exists( "bereik",$conditions) )
	{
		$sql .= $conditions['bereik'];
	}
}


In de bereik condition kan je bijvoorbeeld ook variabelen ingeven met een begin en einddatum.

$conditions['bereik'] = " AND `date` >= " . $begindatum . " AND `date` < " . $begindatum . " + " . " INTERVAL " . $getal . " DAY";


Alles wat je kan verzinnen.

Oh, en pas je LinkenIn profiel eens aan, IT Consultant. Ik moet altijd in mijn broek pissen van het lachen als ik dat lees. En dan moet ik me weer verschonen.
Super bedankt! Niet te vaak dan kijken, haha. Ik verander het.

Reageren