Optimiser while php
13 messages • Page 1 sur 1
Consultez la formation au référencement naturel Google de WebRankInfo / Ranking Metrics
Optimiser while php
Bonjour,
J'aimerais savoir si c'est possible d'avoir la requête qui récupère le champ charname en fonction de l'id, en dehors du while.
Merci
J'aimerais savoir si c'est possible d'avoir la requête qui récupère le champ charname en fonction de l'id, en dehors du while.
Merci
- Code: Tout sélectionner
$boxquery = doquery("SELECT id FROM {{table}} WHERE for1='$userrow[id]' ORDER BY date DESC LIMIT $limit_start, $pagination", "profile_box");
while ($boxrow = mysql_fetch_assoc($boxquery)) {
$fromquery = doquery("SELECT charname FROM {{table}} WHERE id='$boxrow[id]' LIMIT 1", "users");
$fromrow = mysql_fetch_assoc($fromquery);
echo $fromrow['charname'];
}
Dernière édition par sff le Sam Nov 08, 2008 13:51, édité 1 fois.
- Code: Tout sélectionner
$tavariable = "";
while(...){
............
$tavariable = $fromrow['charname'];
}
suite
Je comprends pas trop ce que tu veux dire. Peut être tu as pas compris ce que je voulais faire.
En fait je voudrais exécuter cette requête en dehors du while :
$fromquery = doquery("SELECT charname FROM {{table}} WHERE id='$boxrow[from1]' LIMIT 1", "users");
$fromrow = mysql_fetch_assoc($fromquery);
En fait je voudrais exécuter cette requête en dehors du while :
$fromquery = doquery("SELECT charname FROM {{table}} WHERE id='$boxrow[from1]' LIMIT 1", "users");
$fromrow = mysql_fetch_assoc($fromquery);
Je ne comprends pas trop d'où vient "$boxrow[from1]"
Sinon, je dirai qu'une jointure serait la meilleur solution.
SELECT colonne
FROM table1 t1
LEFT JOIN table2 t2 ON t1.id = t2.id
WHERE t1.id = X
Mais sans la structure etc ... difficile d'en dire plus.
Sinon, je dirai qu'une jointure serait la meilleur solution.
SELECT colonne
FROM table1 t1
LEFT JOIN table2 t2 ON t1.id = t2.id
WHERE t1.id = X
Mais sans la structure etc ... difficile d'en dire plus.
-

UsagiYojimbo - WRInaute accro

- Messages: 5143
- Inscription: Mer Nov 23, 2005 10:38
La question qui me turlupine est : est ce que dans les deux requêtes tu effectues tes requêtes sur la même table ?
Si c'est le cas la réponse de Robinson est la bonne.
Sinon tu peux effectuer ta jointure directement dans la première requête (via un LEFT JOIN ou un INNER JOIN suivant les cas).
Après il serait intéressant de savoir si pour un enregistrement dans la première table tu peux en avoir plusieurs dans la seconde (ou pas).
Si c'est le cas la réponse de Robinson est la bonne.
Sinon tu peux effectuer ta jointure directement dans la première requête (via un LEFT JOIN ou un INNER JOIN suivant les cas).
Après il serait intéressant de savoir si pour un enregistrement dans la première table tu peux en avoir plusieurs dans la seconde (ou pas).
UsagiYojimbo a écrit:La question qui me turlupine est : est ce que dans les deux requêtes tu effectues tes requêtes sur la même table ?
$fromquery = doquery("SELECT charname FROM {{table}} WHERE id='$boxrow[id]' LIMIT 1", "users");
le "users" à la fin, je crois que c'est le nom de la table. Et donc les requetes ne sont pas sur la mm table.
Tu devrais plutot alors construire un chaine de caracteres dans ton while afin de mettre tous les $boxrow[from1] comme ca:
$machaine .= "$boxrow[from1],";
apres une fois sorti du while tu vires le dernier caractere de la chaine puisque ce sera une virgule en trop et tu fais une seule requete avec id IN (8,3,7,1,9,5...) au lieu de ton id= :
$fromquery = doquery("SELECT charname FROM {{table}} WHERE id IN ($machaine)", "users");
et apres tu te fais un autre while pour afficher tous les resultats.
tu vois?
while () {
creer une chaine d'ids
}
faire une seule requete avec tous les ids
while () {
ecrire les données a lecran
}
bon apres c'est sur ca doit etre possible d'ecrire tout ca en une seule requete, moi je te donne simplement la logique pour ne pas faire 36000 requetes dans un while.
$machaine .= "$boxrow[from1],";
apres une fois sorti du while tu vires le dernier caractere de la chaine puisque ce sera une virgule en trop et tu fais une seule requete avec id IN (8,3,7,1,9,5...) au lieu de ton id= :
$fromquery = doquery("SELECT charname FROM {{table}} WHERE id IN ($machaine)", "users");
et apres tu te fais un autre while pour afficher tous les resultats.
tu vois?
while () {
creer une chaine d'ids
}
faire une seule requete avec tous les ids
while () {
ecrire les données a lecran
}
bon apres c'est sur ca doit etre possible d'ecrire tout ca en une seule requete, moi je te donne simplement la logique pour ne pas faire 36000 requetes dans un while.
suite
Non UsagiYojimbo, il s'agit de 2 table différentes.
En fait c'est une messagerie.
La table profile_box contient les messages (ID est celui qui à envoyé le message)
La table users contient le pseudo de tous les utilisateur du site.
Donc dans le while on affiche le pseudo de celui qui à envoyé le message.
En fait c'est une messagerie.
La table profile_box contient les messages (ID est celui qui à envoyé le message)
La table users contient le pseudo de tous les utilisateur du site.
Donc dans le while on affiche le pseudo de celui qui à envoyé le message.
SELECT p_b.id, u.charname
FROM profile_box p_b
LEFT JOIN users u ON u.id = p_b.id
WHERE p_b.for1='$userrow[id]'
GROUP BY u.id
ORDER BY p_b.date DESC LIMIT $limit_start, $pagination
tu fais ça comme requete (GROUP BY u.id < utile uniquement si il est possible qu'il y ai plusieurs résultats dans "users")
et donc tu auras $boxrow['charname'] directement.
Bon courage
FROM profile_box p_b
LEFT JOIN users u ON u.id = p_b.id
WHERE p_b.for1='$userrow[id]'
GROUP BY u.id
ORDER BY p_b.date DESC LIMIT $limit_start, $pagination
tu fais ça comme requete (GROUP BY u.id < utile uniquement si il est possible qu'il y ai plusieurs résultats dans "users")
et donc tu auras $boxrow['charname'] directement.
Bon courage
13 messages • Page 1 sur 1
Formation recommandée sur ce thème :
Formation Référencement naturel Google : apprenez une méthode efficace pour optimiser à fond le référencement naturel dans Google de façon durable... Formation animée par Olivier Duffez et Fabien Facériès, experts en référencement naturel.
Tous les détails sur le site Ranking Metrics : programme, prix, dates et lieux, inscription en ligne.
Lectures recommandées sur ce thème :
- Ranking Metrics lance son blog
- Optimiser le nombre de mots dans les textes de liens
- 10 règles pour optimiser son référencement sur Google
- Optimiser les images : l'attribut ALT de la balise IMG
- Les frames et le référencement
- Lancement du cursus WebMarketing de Ranking Metrics
- Suite de l'article sur le fichier .htaccess : l'URL rewriting
- Classement Xiti/1ère Position des outils de recherche en France - Août 2002
- Optimiser un base de données en php ?
- comment optimiser un site web dynamique PHP
- Optimiser apache / php pour un tout petit serveur
- Optimiser serveur/code pour jeu développé en PHP
- Script PHP - Optimiser toutes les bases de données.
- Aide pour optimiser l'écriture d'une requete PHP/MYSQL
- optimiser un site
- Optimiser balise H1
- Optimiser mysql
- comment optimiser
- optimiser adwords
- Optimiser 6 requêtes...
- Optimiser mon référencement / indexation
- Optimiser robots.txt
- Optimiser lieux geographique
Qui est en ligne
Utilisateurs parcourant ce forum: Aucun utilisateur enregistré et 0 invités




le forum