AOP fetchAll() clé primaire comme la matrice de la clé de groupe
Je veux stocker le contenu d'une base de données spécifique dans un tableau, regroupées en fonction de leurs clés primaires. (Au lieu de l'inutile façon AOP fetchAll() les organise).
Mon code actuel:
$DownloadsPDO = $database->dbh->prepare("SELECT * FROM `downloads`");
$DownloadsArray = $DownloadsPDO->execute();
$DownloadsArray = $DownloadsPDO->fetchAll();
Qui ensuite sorties:
Array ( [0] => Array ( [id] => 0 [0] => 0 [path] => /xx-xx/testfile.zip [1] => /xx-xx/testfile.zip [name] => Test Script [2] => Test Script [status] => 1 [3] => 1 ) [1] => Array ( [id] => 1 [0] => 1 [path] => /xx-xx/test--file.zip [1] => /xxxx/testfile.zip [name] => New Script-UPDATE [2] => New Script-UPDATE [status] => 1 [3] => 1 ) )
J'envisage d'utiliser PDO::FETCH_PAIR
, cependant je serai très bientôt à l'expansion de la quantité de données que je veux être en mesure d'utiliser ce script. Cela fonctionne actuellement, mais quand je commence à élargir le nombre de téléchargements et de plus en plus de clients entrent en jeu, évidemment, la façon dont les données sont regroupées les causes d'un problème.
Est-il possible pour moi de groupe de chaque tableau par leur clé primaire (qui est id)?
- Boucle les résultats à l'aide
fetch()
à la place. - J'ai pu le faire ... mais n'est-elle pas à l'encontre du but même d'avoir un fetchAll() la fonction? @hjpotter92
Vous devez vous connecter pour publier un commentaire.
Vous pouvez simplement utiliser
PDO::FETCH_GROUP|PDO::FETCH_ASSOC
retourne un tableau de tableaux. La première colonne est utilisée comme clé, et puis à l'intérieur de la clé est un tableau de tous les résultats de cette clé. Cependant, dans notre scénario, chaque clé contient uniquement 1 ligne.reset
renvoie le premier élément dans le tableau, en éliminant 1 niveau d'imbrication.Vous devriez voir à ce que vous recherchez :
J'ai décidé de faire une boucle par les résultats avec fetch() et entrez-les dans un tableau que je vais le long, c'est le code que j'ai utilisé et il fonctionne très bien:
Qui utilise la clé primaire (étant id) comme nom pour la clé du tableau, puis ajoute les données.
Pensé que je voudrais ajouter ceci comme la réponse à cette résolu, merci aux gars qui ont aidé et j'espère que cela est utile à quelqu'un d'autre l'espoir de réaliser la même chose.
Je tiens à souligner la seule solution qui fonctionne pour moi:
fetchAll(\PDO::FETCH_GROUP|\PDO::FETCH_UNIQUE|\PDO::FETCH_ASSOC);
Attention, cette bande de la première colonne dans le jeu de résultats. Donc, la requête doit être:
SELECT id_keyname AS arrkey, id_keyname, .... FROM ...
PDO::FETCH_ASSOC|PDO::FETCH_UNIQUE
.Je suis encore en vous proposant de boucle à l'aide de
fetch()
méthode. Sinon, vous pouvez utiliserarray_reduce()
pour parcourir le tableau. Un échantillon sur codepad est ici.Le code(sous forme lisible par l'homme) seront les suivantes:
Bien sûr, vous avez 2 options: Soit pour changer la requête ou analyser un ensemble résultat.
Donc, je suis sûr que vous ne voulez pas modifier la requête elle-même, donc j'irais avec l'analyse des résultats.
Remarque:
Vous devez utiliser SQL préparée consolidés lorsqu'ils font sens. Si vous souhaitez lier certains paramètres, puis c'est CORRECT. Mais dans ce cas, vous ne voulez obtenir des résultats, de sorte
prepare()
etfetch()
sera un peu trop.Donc, vous avez:
Et que vous souhaitez:
Bien, vous pouvez faire quelque chose comme ceci: