2017-07-19 3 views
-1

J'ai deux requêtes (exactement la même chose), que je voudrais fusionnerComment combiner les deux mêmes requêtes (chercher et fetchall)

La première requête:

$stmt = $bdd->prepare('SELECT *, DATE_FORMAT(date_parcel,"%d/%m/%Y") AS formatted_date from validated WHERE name = :name group by age order by age DESC'); 
$stmt ->execute(array(
    ':name' => $_GET['name'] 
)); 
$orders = $stmt ->fetchall(); 

Il permet moi de faire ma boucle foreach pour mettre toutes les données dans un tableau HTML

La seconde requête:

$infos = $bdd->prepare('SELECT *, DATE_FORMAT(date_parcel,"%d/%m/%Y") AS formatted_date from validated WHERE name = :name group by age order by age DESC'); 
$infos ->execute(array(
    ':name' => $_GET['name'] 
)); 
$info = $infos ->fetch(); 

C'est exactement la même qu'avant, mais il me permet d'utiliser les données avant ma boucle foreach pour afficher des informations.

Le code ressemble à ceci:

<div class="panel panel-default"> 
    <div class="panel-body"> 
     <center><h3><?php echo ucwords(strtolower($info['data5'])). ' - ' . $info['data6']; ?></h3></center> 
     .... 
    </div> 
</div> 

.... 

<tbody> 
    <?php foreach ($orders as $row) { ?> 
    <tr> 
     <td colspan="1"><?php echo $row['data1'] ?></td> 
     <td colspan="1"><?php echo $row['data2'] ?></td> 
     <td colspan="1"><?php echo $row['data3'] ?></td> 
     <td colspan="1"><?php echo $row['data4'] ?></td> 
    </tr> 
    <?php } ?> 
</tbody> 

Je voudrais être en mesure d'utiliser une seule demande, comment puis-je le faire? Merci

+0

Les GROUP BY de ne sont pas valides, soulèvera une erreur sur les nouvelles versions de MySQL (sauf en mode de compatibilité), et retourner un résultat imprévisible sur les anciennes versions. La règle générale GROUP BY indique: Si une clause GROUP BY est spécifiée, chaque référence de colonne de la liste SELECT doit soit identifier une colonne de regroupement, soit être l'argument d'une fonction set! – jarlh

Répondre

1

je pense que vous pouvez utiliser comme cette

$stmt = $bdd->prepare('SELECT *, DATE_FORMAT(date_parcel,"%d/%m/%Y") AS formatted_date from validated WHERE name = :name group by age order by age DESC'); 
$stmt ->execute(array(
    ':name' => $_GET['name'] 
)); 
$orders = $stmt ->fetchall(); 
$info = $stmt ->fetch(); 

Peut-être que ça fonctionne ... ne suis pas sûr.

+0

Merci pour votre réponse mais ce n'est pas possible, avec votre code, il ne peut pas savoir quoi $ infos – Rocstar

+0

Ne fonctionne pas, quand j'utilise var_dump, j'ai ce résultat: 'boolean false' – Rocstar

1

fetchAll retourne un tableau de sorte que vous pouvez facilement l'utiliser pour obtenir une ligne spécifique:

$stmt = $bdd->prepare('SELECT *, DATE_FORMAT(date_parcel,"%d/%m/%Y") AS formatted_date from validated WHERE name = :name group by age order by age DESC'); 
$stmt ->execute(array(
    ':name' => $_GET['name'] 
)); 
$orders = $stmt ->fetchall(); 
$info = $orders[0]; 
+0

Ouais! Merci, ça marche! C'est le meilleur moyen de combiner ces deux requêtes? – Rocstar

+0

Utiliser '$ orders [0]' directement ou le copier en référence à '$ info' pourrait être un peu plus efficace en termes de mémoire, mais je pense que c'est négligeable dans ce cas. –