J'essaie d'utiliser une instruction avec ce code, il met toujours à jour le "user_level" à 6. P> Ce que je veux ici, c'est lorsque l'utilisateur obtient 2001 points de discussion ... Mise à jour vers le niveau 1
Et quand ils obtiennent 5000 points de discussion ... Mise à jour du niveau 2, etc. p> Quelqu'un peut-il expliquer ce que je fais mal? p> p> si code> pour mettre à jour une colonne de ma base de données.
5 Réponses :
Votre code est Un moyen de résoudre ce problème sans changer le code trop consiste à utiliser si else { code> déclarations pour ne conserver qu'une seule déclaration de fonctionnement à la fois. P>
if($data[chat_points] != '2001'){
$mysqli->query("UPDATE boom_users SET user_level = 1 WHERE user_id = '{$data['user_id']}'");
} else if($data[chat_points] != '5000'){
$mysqli->query("UPDATE boom_users SET user_level = 2 WHERE user_id = '{$data['user_id']}'");
} else if($data[chat_points] != '15001'){
$mysqli->query("UPDATE boom_users SET user_level = 3 WHERE user_id = '{$data['user_id']}'");
} else if($data[chat_points] != '35001'){
$mysqli->query("UPDATE boom_users SET user_level = 4 WHERE user_id = '{$data['user_id']}'");
} else if($data[chat_points] != '45001'){
$mysqli->query("UPDATE boom_users SET user_level = 5 WHERE user_id = '{$data['user_id']}'");
} else if($data[chat_points] != '70001'){
$mysqli->query("UPDATE boom_users SET user_level = 6 WHERE user_id = '{$data['user_id']}'");
}
Le code OPS a été brisé (toujours niveau 5 code> ou
6 code>), vous êtes cassé aussi (toujours niveau
1 code> ou
2 code >).
Prenez note d'avoir un code fonctionnel (comme mentionné ci-dessous), vous devez remplacer le ! = Code> sur
== code>. Ce code est le le plus rapide b>
Votre code n'a aucun sens. Ce sera toujours 5 (lorsque des points == 70001) ou 6 (tous les autres points).
Je m'attends à ce que la condition soit inférieure à ", donc p>
Ou mieux, plus court, plus rapide ... p>
L'objectif de l'affiche était de ne faire fonctionner que le code d'exécuter un certain nombre de fois pour minimiser le nombre de requêtes totales de la base de données. Dans vos deux exemples de code, votre code fera une requête chaque fois, quel que soit le user_level code>. Cela signifie qu'il a performance médiocre b>.
@SHN: Où est écrit qu'il a besoin de minimiser le nombre de requêtes SQL? Je viens de voir qu'il y ait un chat_points code> score (nous ne savons pas si incrémenté par 1) et l'OP doit assurer certains
user_level code> à son score. Rien du nombre de requêtes, etc.
Une solution ne minimisant pas le nombre de requêtes provoquerait plusieurs milliers de requêtes redondantes à effectuer b>, donc à ce stade, toute solution ne minimisant pas le nombre total de requêtes est irresponsable.
@SHN: Vous êtes probablement le lecteur d'esprit, je ne lis pas cela dans la question ... mais bonne chance, Downvoter Guy ;-)
Je viens de dire que toute solution introduit des milliers de requêtes indésirables dans une mise en œuvre apparemment amateur n'est pas recommandée. :)
Je ne sais pas comment je peux dire "merci", mais vraiment tu m'as tellement aidé avec ce code. Le dernier a fonctionné bien avec moi et c'est vraiment mieux, plus court et plus rapide que le premier, vraiment merci.
Juste FYI, l'élégance de cette solution est agréable, mais la performance de cette méthode est littéralement des milliers de fois que quelque chose de plus similaire à votre implémentation initiale.
@SHN: Où est écrit chat_points code> est incrémenté par 1? Si ce serait incrémenté, par exemple. par 3 (ou comme sur SO, parfois par +10, parfois +25, parfois -1, -2), conditions avec
== code> ou
! = code> peut être toujours faux (L'utilisateur peut avoir 100 000 points, mais manque les jalons). Le OP a marqué cette réponse comme l'acceptée, donc il répond probablement à la question. Howhh. Désolé, il est gaspillé de mon temps pour discuter ici avec vous.
@ Av.Blacky: Ça va, pas de spécial "merci" besoin de :-) Content de vous aider.
Désolé @papther, mais j'ai une question, que si je veux montrer à l'utilisateur combien de points il a encore besoin d'obtenir le niveau suivant, comment je peux le faire?
@ Av.Blacky: Mise à jour de ma réponse
C'est ce que je devrais faire:
//compare if user approached the 2001 limit but not exceed 5000 limit if($data[chat_points] >= '2001' && $data[chat_points] < '5000'){ $mysqli->query("UPDATE boom_users SET user_level = 1 WHERE user_id = '{$data['user_id']}'"); }
Notez que pour optimiser les performances, la requête doit être exécutée uniquement le nombre de fois que le niveau doit être modifié.
Je suis d'accord avec vous, mais le seul moyen de minimiser les appels consiste à disposer du niveau utilisateur actuel Var disponible. De cette façon, nous venons de transmettre ce Var en état et vérifions si le niveau utilisateur a toujours le même niveau afin de ne pas apporter aucun appel, surwizez s'il est inférieur au niveau de point existant, nous appelons un appel à dB
Si je ne vous ai pas mal compris, vous interrogez strong> alors que diriez-vous de cette façon?
Ce code fait la même chose, cela appelle à DB à chaque fois qu'il a une matrimonie non vide.
@ Sergheleonenco a été édité, qu'en est-il maintenant :)
Nous devons obtenir le niveau d'utilisateur actuel. Juste un appel
$sql = "SELECT user_level FROM boom_users WHERE user_id = '{$data['user_id']}'"); //get the current user level $level = $mysqli->query($sql)->fetch_object()->user_level; //compare if user approached the 2001 limit but not exceed 5000 limit if($data[chat_points] >= '2001' && $data[chat_points] < '5000' && $level != 1){ $mysqli->query("UPDATE boom_users SET user_level = 1 WHERE user_id = '{$data['user_id']}'"); }
Votre code n'a aucun sens. Ce sera toujours
5 code> (quand points == 70001) ou
6 code> (tous les autres points).
Où est
$ data [chat_points] code> en provenance? Une autre requête, peut-être? Vous pouvez tout faire dans une requête SQL et supprimer le code conditionnel de votre PHP.
Pourquoi utilisez-vous alors non un signe égal? Si vous comparez des données utilisateur à un point, utilisez '==' signe.
Je suis désolé de mon manque d'expérience avec cela, je suis encore débutant pour cela, et $ Data [Kardpoints] est une autre colonne de ma base de données qui stocke les points d'utilisateur à l'intérieur.
Avez-vous dans votre tableau des données 'user_level' disponibles?