2017-09-18 9 views
1

Je suis encore très jeune avec SQL et j'ai réussi à saisir les données que je veux en utilisant une requête. Je veux être en mesure de choisir la somme des dossiers sur un jour et je peux accéder à partir de PHP en utilisantComment faire une boucle avec la requête mySQL pour retourner un tableau

<?php 
    $sql = $pdo->prepare("select count(*) from `Visits` where 
    date(`Date`)=date(date_sub(now(),interval 1 day))"); 
    $sql->execute(); 
    $result = $sql->fetch(PDO::FETCH_ASSOC); 
    echo $result['count(*)']; 
?>; 

Les données renvoie les enregistrements hiers. Le problème est que je veux être en mesure de le faire pour un certain nombre de jours (7 et 30 derniers), et je ne vois pas comme possible de répéter le code ci-dessus autant de fois.

Toute aide sur la modification de la requête pour retourner un seul tableau que je pourrais saisir toutes ces valeurs serait vraiment utile! Ce serait idéal si le tableau pouvait prendre la valeur «nombre de jours passés» et retourner le nombre d'enregistrements ce jour-là.

Modifier: Je dois toujours retourner 0 pour les jours qui n'ont pas d'enregistrements.

Répondre

1

Vous pouvez essayer avec horodatages:

<?php 
    $last_days = 7; 
    $sql = $pdo->prepare("select count(*) as count from `Visits` where 
    UNIX_TIMESTAMP(`Date`) < UNIX_TIMESTAMP() AND UNIX_TIMESTAMP(`Date`) > UNIX_TIMESTAMP() - 60 * 60 * 24 * $last_days"); 
    $sql->execute(); 
    $result = $sql->fetch(PDO::FETCH_ASSOC); 
    echo $result['count']; 
?>; 
+0

Merci pour la réponse, mais je peux saisir les données ... je veux juste trouver une meilleure façon que de le saisir de la même manière 30 fois. –

1

Si vous voulez une table avec les résultats par jour, vous devez modifier votre requête SQL pour retourner une table à la fois le jour et le comte pour chaque jour. Pour cela, incluez la date dans une autre colonne et regroupez vos résultats par jour.

<?php 
    $last_days=7 
    $sql = $pdo->prepare("select count(*) as `count`,date(`Date`) as `day` from `Visits` where 
    date(`Date`) > date(date_sub(now(),interval ? day)) GROUP BY date(`Date`)"); 
    $sql->execute(array($last_days)); 
    while($result = $sql->fetch(PDO::FETCH_ASSOC)) { 
     echo $result['count']. " for day:" . $result['day']." <br>\n"; 
    } 
    ?> 
+0

Merci pour la réponse. Cela fonctionne, mais à cause du «groupe par date», il ne renvoie que les jours où il y a des valeurs. J'en ai toujours besoin pour retourner 0 les jours qui n'en ont pas. Y at-il un moyen de modifier cela pour y parvenir? –