2010-03-30 5 views
0

J'ai un script PHP qui prend une valeur d'une ligne dans ma base de données MySQL, l'exécute à travers une fonction, et si elle détermine qu'elle est vraie renvoie une valeur, et si elle est fausse, elle doit passer à la valeur suivante base de données et vérifier celui-ci jusqu'à ce que finalement on retourne vrai. Je pense que je dois utiliser mysql_fetch_assoc, mais je ne suis pas vraiment sûr de la façon de l'utiliser ... J'aimerais pouvoir publier mon code pour être plus précis, mais c'est beaucoup de code et la plupart n'a pas d'incidence sur ce problème ...PHP next Ligne MySQL - comment déplacer un pointeur jusqu'à ce que la fonction vérifie true?

Répondre

2

Est-ce que la "fonction" est quelque chose que vous pourriez faire dans la base de données? Il est vraiment inefficace de traiter chaque ligne de la table pour vérifier un certain type de condition. C'est exactement ce que les bases de données sont bonnes, à savoir, traiter les requêtes efficacement et obtenir des réponses rapidement.

Je vous recommande donc de regarder comment faire tout cela du côté de la base de données pour que votre code PHP ne fasse que récupérer le résultat final (c'est-à-dire les lignes filtrées par la fonction). Peut-être que si vous fournissez plus de détails sur ce que fait votre "fonction", une réponse plus spécifique peut être fournie.

+0

Oh, non, j'ai besoin de le vérifier par rapport à une variable de session PHP. Il n'aura pas à gérer beaucoup de données, il ne passera pas plus de deux ou trois ou deux avant qu'il ne se révèle vrai. – ropbhardgood

+0

Vous pouvez toujours utiliser la variable de session PHP comme paramètre dans votre requête: SELECT * from mytable où col1 = dcp

+0

Je le ferais, dcp, mais j'essaie en fait d'en trouver une où l'une des valeurs ne contient PAS la variable de session. Savez-vous s'il existe un moyen de le faire avec une commande MySQL? – ropbhardgood

0

Vous pouvez utiliser mysql_fetch_array, et simplement sauter sur les valeurs récupérées en utilisant $ row [id] et non $ row ['name']. Supposons que votre fonction renvoie true, utilisez simplement $ row [lastid + 1].

Si le n `ID incrémentielle, cela pourrait fonctionner:

$qry_result = mysql_query($qry) or die(mysql_error()); 
while ($row = mysql_fetch_array($qry_result)) { 
    $result = yourfunction($row['whatever'); 
    if ($result != false) 
     break; 
} 

Il y a également une fonction php suivante() qui avance un pointeur sur l'élément suivant du tableau. Dans votre fonction, vous pouvez implémenter un générateur de tableau, puis faire un cycle entre les éléments avec ceci. Cela dépend de ce que fait réellement votre fonction ou du but du script. Cela pourrait entraîner une certaine charge s'il y a beaucoup de résultats.

+0

Intéressant. Cela fonctionnerait-il lorsque la clé primaire n'est pas incrémentielle? – ropbhardgood

+0

Mise à jour de la solution pour votre cas avec non incrémentielle. –

0

Vous pouvez essayer quelque chose comme ceci:

SELECT * 
FROM table 
WHERE field NOT LIKE '%$sessionvar:%'; 

Je pense que ce que vous êtes après?

+0

Je pense que cela va être utile. Je vous remercie. – ropbhardgood

0
  1. Vous ne devriez pas vérifier la base de données de cette façon, comme mentionné ci-dessus. La base de données a une petite différence par rapport au fichier texte brut.
  2. Vous ne devriez pas avoir un champ dans votre base de données qui a un tas de valeurs séparées par value1: value2 | value1: value2 | value1: value2. Ce doit être des champs séparés. La base de données a une petite différence par rapport au fichier texte brut et vous feriez mieux de l'apprendre.
+0

Merci pour cette précieuse contribution. – ropbhardgood