J'ai une table qui relie 2 autres tables ensemble. p>
J'ai une liste de cases à cocher, où quand on est vérifié, il envoie la valeur au serveur via AJAX. p>
Ce que je veux faire, c'est si les valeurs ne sont pas dans la base de données, insérez-les (cochées) ou si elles sont là, supprimez-les (non cochées) p>
Y a-t-il un moyen de le faire sans écrire plusieurs requêtes? Je sais que ce n'est pas difficile avec une insertion / mise à jour, mais qu'en est-il de Supprimer? P>
5 Réponses :
Insérer s'il n'existe pas ... n'est pas disponible dans MySQL (il est spécifique à T-SQL AFAIK). Utilisez une transaction à la place mais gardez à l'esprit que tout moteur MySQL prend en charge les transactions, bien qu'aucune erreur ne soit soulevée lors de l'utilisation de déclarations transactionnelles. P>
Je connais le serveur que je suis développé, mais nous allons changer les hôtes bientôt et je ne sais pas quelle version ou ce que les admins SYS seront ou ne permettront pas où nous finirons, alors j'essaie de garder aussi basique que possible pour le moment.
Utilisez un index unique et utilisez INSERT Ignorer, de cette façon, il sera insérer s'il n'existe pas. Vous pouvez avoir la même chose faire de cette façon.
Vous pouvez également supprimer et, si les lignes affectées sont 0, puis insérez. Facile, simple et ça marche. P>
C'est la seule façon dont je sais comment, et pense que je vais juste aller avec ... merci
Ceci pourrait vous aider en fonction de votre structure clé http://bogdan.org.ua/2007/10/18/mysql-insert-if-not-exists-syntax.html p>
Sinon, vous pourriez être capable de gérer ce que vous faites avec une sous-requête? P>
pas à 100% de ce que vous recherchez, mais il n'existe pas s'il n'existe pas: http://remy.supertext.ch/2010/ 11 / mysqlupdate-and-in insert-if-ne pas-existe /
INSERT INTO wp_postmeta (post_id, meta_key) SELECT ?id, âpage_titleâ
FROM DUAL WHERE NOT EXISTS (
SELECT meta_id FROM wp_postmeta WHERE post_id = ?id AND meta_key = âpage_titleâ);
UPDATE wp_postmeta SET meta_value = ?page_title WHERE post_id = ?id AND meta_key = âpage_titleâ;
Il n'y a rien de tel que sur la suppression en double ou une utilisation correcte de si sinon avec les sous-requêtes pour le faire dans une requête (ce qui serait pratique puisque cette requête réussira ou échoue). Pensez que vous devriez rouler sur plusieurs requêtes pour atteindre votre objectif, comme je l'ai fait. Mais garder la trace sur la question de savoir si les requêtes ultérieures continuent à réussir.
Démarrer avec une valeur de retour ("État" dans ce cas) qui est "inconnu" ou "NoChange". Si cela vous retourne à votre appel AJAX, vous savez que la case à cocher doit revenir à son état précédent avant de cliquer sur l'état précédent et possible de contempler un message (que vous pouvez transporter avec le JSON). P>
Exécutez vos requêtes dans un Corrigez si / puis la structure de code et gardez une trace des requêtes suivantes et mettez à jour «l'état» lorsqu'une série a réussi en conséquence. Cela devrait faire exactement ce dont vous avez besoin, gardez-le d'avoir des trous noirs. P>
(J'utilise des emballages pour exécuter des requêtes, qui renvoient vrai / faux / null / errorInformation - qui vous permet de vérifier chaque résultat de la requête) P>
Je suppose que vous avez déjà votre appel Ajax en place. L'exemple de code démarre où votre appel AJAX démarre le traitement à partir du côté serveur: p>