Il me manque peut-être l'évidence, comment puis-je renvoyer les résultats dont j'ai besoin? Jetez un œil à cet exemple simple:
<div class="sp-wrap">
<a href="images/1.jpg">
<!-- This would be the placeholder/main/first image from the mysql result set -->
<img src="images/1_tb.jpg" alt="">
</a>
<!-- In real life these would be dynamically generated -->
<a href="images/3.jpg"><img src="images/3_tb.jpg" alt=""></a>
<a href="images/4.jpg"><img src="images/4_tb.jpg" alt=""></a>
<a href="images/5.jpg"><img src="images/5_tb.jpg" alt=""></a>
<a href="images/6.jpg"><img src="images/6_tb.jpg" alt=""></a>
</div>
Le code ci-dessus parcourt les 10 lignes. Comment puis-je renvoyer la première ligne de l'ensemble de résultats, puis les 9 autres lignes?
Modifier: j'essaie de créer un aperçu d'image pour que la première image apparaisse comme espace réservé / image principale puis les 9 autres lignes apparaissent sous forme de vignettes, quelque chose comme ceci:
$fetch_image = "SELECT image_url FROM table"; //returns about 10 rows
$stmt_img = $db->prepare($fetch_image);
$stmt_img->execute();
$stmt_img_result = $stmt_img->get_result();
while ($row_img = $stmt_img_result->fetch_assoc()) {
$image = $row_image['image_url'];
echo 'Image url: '.$image.'<br>'; //this will echo out 10 times.
}
3 Réponses :
Vous pouvez essayer d'obtenir la première ligne, puis le reste. Mais vous avez besoin d'une clause ORDER BY dans votre instruction SQL qui ordonnera les lignes de la même manière à chaque exécution.
<?php
$fetch_image = "SELECT image_url FROM table"; //returns about 10 rows
$stmt_img = $db->prepare($fetch_image);
$stmt_img->execute();
$stmt_img_result = $stmt_img->get_result();
$first = true;
while ($row_img = $stmt_img_result->fetch_assoc()) {
if ($first) {
// Specific output for the first row
$first = false;
$image = $row_image['image_url'];
echo 'Image url: '.$image.'<br>'; // this will echo out 1 time.
} else {
// Specific output for the next rows
$image = $row_image['image_url'];
echo 'Image url: '.$image.'<br>'; // this will echo out count - 1 times.
}
}
?>
Une autre approche possible consiste à implémenter une vérification personnalisée pour première ligne:
<?php
$fetch_image = "SELECT image_url FROM table"; //returns about 10 rows
$stmt_img = $db->prepare($fetch_image);
$stmt_img->execute();
$stmt_img_result = $stmt_img->get_result();
// Fetch first row
if ($row_first = $stmt_img_result->fetch_assoc()) {
$image = $row_first['image_url'];
echo 'Image url: '.$image.'<br>';
}
// Fetch next rows
while ($row_next = $stmt_img_result->fetch_assoc()) {
$image = $row_next['image_url'];
echo 'Image url: '.$image.'<br>';
}
?>
Une simple variable booléenne peut distinguer la première ligne:
$first_row = true;
while ($row_img = $stmt_img_result->fetch_assoc()) {
if ($first_row) {
echo 'the first row';
$image = $row_image['image_url'];
echo 'Image url: '.$image.'<br>';
$first_row = false;
} else {
$image = $row_image['image_url'];
echo 'Image url: '.$image.'<br>'; //this will echo out 9 times.
}
}
créez imageType Column dans votre table puis utilisez cette requête
$stmt_img = $db->prepare($fetch_image);
$stmt_img->execute();
$stmt_img_result = $stmt_img->get_result();
if ( $firstrow = mysql_fetch_assoc($stmt_img_result) ) {
$image = $firstrow['image_url'];
echo 'Image url: '.$image.'<br>'; //this will echo out 1 times.
while($row = mysql_fetch_assoc($stmt_img_result)) {
$image = $row['image_url'];
echo 'Image url: '.$image.'<br>'; //this will echo out 9 times.
}
}
donnez la valeur 1 à l'image que vous voulez voir apparaître en premier dans la boucle.
si votre première ligne contient la première image, vous n'avez pas besoin de la colonne imageType. vous pouvez simplement utiliser
SELECT image_url FROM table order by id
où id est votre CLÉ PRIMAIRE
mais quand même, la méthode ci-dessus est une approche plus dynamique au cas où vos enregistrements changeraient à l'avenir. il est préférable de leur donner une colonne imageType pour une utilisation future, ce qui est plus approprié au lieu de simplement obtenir le premier enregistrement de la base de données.
SELECT image_url FROM table order by imageType`
Cela peut fonctionner mais cela nécessite toujours une colonne inutile dans la base de données alors que cela pourrait tout aussi bien être fait avec PHP. (mais je n'ai pas voté contre)
@BillWhickomb merci de me l'avoir dit. Ce que j'ai appris sur StackOverflow jusqu'à présent, c'est de dire aux OP la bonne façon de faire les choses au lieu de simplement leur donner une solution à leur problème. C'est un vrai même s'il ajoute une colonne supplémentaire dans la base de données, c'est ce dont il aura besoin dans le futur. et j'ai également donné une autre solution sans ajouter de colonne supplémentaire, c'est-à-dire ordre par clé primaire
Je ne trouve pas que ce soit la "bonne" façon de faire cette tâche. Si je faisais cette tâche pour le travail, je choisirais probablement le premier bloc de code de Zhorov car il n'effectue pas de vérifications conditionnelles inutiles à l'intérieur d'une boucle.
@mickmackusa et si son enregistrement d'où il obtient l'image d'administration est modifié à l'avenir ou est supprimé?
Je ne vois pas en quoi c'est un problème. L'OP veut faire quelque chose avec la première ligne, puis quelque chose de différent pour toutes les lignes suivantes. Aucune raison d'inventer des boîtiers marginaux ici.
@mickmackusa vérifier J'ai donné une solution mais la plupart des autres m'ont dit que nous devrions indiquer aux OP une manière appropriée au lieu de simplement leur fournir une solution à leur problème stackoverflow.com/ questions / 55037320 /…
Oui je suis d'accord. Nous devons toujours dire au PO la manière «appropriée». Je ne suis tout simplement pas d'accord pour dire que votre réponse est la «bonne» manière. Il y a des frais généraux inutiles avec votre suggestion. La solution de Zhorov n'a pas de frais généraux inutiles.
@mickmackusa J'ai déjà expliqué pourquoi j'avais dit que c'était une approche plus appropriée, mais vous avez dit: n'inventez pas d'étuis marginaux ici.
@mickmackusa Ok, je suis en train de modifier ma réponse, il me suffit d'ajouter la partie PHP également.
$ img_rows = $ stmt_img_result-> fetch_assoc (); serait mieux nommé $ img_row puisque vous ne récupérez qu'une seule ligne de l'ensemble de résultats. J'espère que votre extrait de code modifié ne fonctionnera pas comme vous le souhaitez.
créez une colonne imageType dans votre table puis utilisez cette requête SELECT image_url FROM table order by imageType
Outre la requête SQL, j'aimerais savoir comment le faire dans le jeu de résultats, c'est-à-dire la boucle while
enregistrer les valeurs imageType dans votre base de données 1 pour la première image que vous souhaitez faire apparaître
Un simple booléen $ first_row, initialement mis à true, puis vérifié dans la boucle ferait l'affaire.
Si le DOM est le même d'une ligne à l'autre, mais que seul le «style» (dimensions de l'image) change, ne pourriez-vous pas laisser tout le travail au css?
jsfiddle.net/g78h0tz3