MySQL: flag = 1 lorsque id IN (...Sinon 0)?

  • joebert
  • Sledgehammer
  • Genius
  • No Avatar
  • Inscription: Fév 10, 2004
  • Messages: 13455
  • Loc: Florida
  • Status: Offline

Message Octobre 12th, 2009, 3:21 am

Ive a obtenu une table de catégories et il ya une colonne indexée drapeau que je vérifie pour voir si la catégorie doit être affiché sur l'indice.

Ive a obtenu à peu près toutes Im per-unit editors configuration et maintenant mon travail sur les rédacteurs en vrac. Ma conception actuelle de l'éditeur du pavillon en vrac m'a <ul> créer des hiérarchies avec cases à cocher dans le <li> éléments de chaque catégorie.

Voici un exemple de ma case. J'ai l'intention d'avoir un simple tableau de la catégorie entiers id correspondant à des catégories qui devraient avoir également le flag set.

HTML Code: [ Select ]
<li><label><checkbox name="flags[{category_id}]" .../>


Maintenant, les deux voies de requête pour ce faire est assez simple.

SQL Code: [ Select ]
UPDATE categories SET flag = FALSE

SQL Code: [ Select ]
UPDATE categories SET flag = TRUE WHERE id IN (...)


Je ne veux pas utiliser deux requêtes though. Ayant 1000 lignes dans ce tableau serait une très grave surestimation du nombre de lignes max prévu.

Comment puis-je définir l'indicateur à la fois nécessaire états avec une seule requête en MySQL avoir un tableau d'identifiants de catégorie qui devrait avoir l'indicateur défini TRUE en entrée?
Strong with this one, the sudo is.
  • Anonymous
  • Bot
  • No Avatar
  • Inscription: 25 Feb 2008
  • Messages: ?
  • Loc: Ozzuland
  • Status: Online

Message Octobre 12th, 2009, 3:21 am

  • joebert
  • Sledgehammer
  • Genius
  • No Avatar
  • Inscription: Fév 10, 2004
  • Messages: 13455
  • Loc: Florida
  • Status: Offline

Message Octobre 12th, 2009, 3:33 am

Par Jupiter je crois Ive got it!

SQL Code: [ Select ]
UPDATE categories
SET flag =
CASE category_id IN (1,3,5,7,9) WHEN TRUE THEN TRUE
ELSE FALSE END
  1. UPDATE categories
  2. SET flag =
  3. CASE category_id IN (1,3,5,7,9) WHEN TRUE THEN TRUE
  4. ELSE FALSE END
  • Bigwebmaster
  • Site Admin
  • Site Admin
  • Avatar de l’utilisateur
  • Inscription: Déc 20, 2002
  • Messages: 8926
  • Loc: Seattle, WA & Phoenix, AZ
  • Status: Offline

Message Octobre 12th, 2009, 2:37 pm

Yup, j'ai été sur le point de mentionner le cas .. QUAND .. Puis .. ELSE .. FIN syntaxe pour vous. Récemment, j'ai besoin de quelque chose comme cela aussi pour quelque chose que je travaillais.
Ozzu Hosting - Want your website on a fast server like Ozzu?
  • joebert
  • Sledgehammer
  • Genius
  • No Avatar
  • Inscription: Fév 10, 2004
  • Messages: 13455
  • Loc: Florida
  • Status: Offline

Message Octobre 12th, 2009, 2:40 pm

Id déjà pensé AFFAIRE Id commencé lorsque le fil, mais j'avais des problèmes pour faire son entrée IN pour travailler pour moi.

J'ai continué à vouloir faire quelque chose comme ceci à la place de la façon dont je l'ai là-haut.

SQL Code: [ Select ]
UPDATE categories
SET flag =
CASE category_id WHEN IN (1,3,5,7,9) THEN TRUE
ELSE FALSE END
  1. UPDATE categories
  2. SET flag =
  3. CASE category_id WHEN IN (1,3,5,7,9) THEN TRUE
  4. ELSE FALSE END


Cela me donnerait des erreurs comme ça, qui me faisait me demander si AFFAIRE pouvaient soutenir à tout.

Code: [ Select ]
You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'IN (1,3,5,7,9) THEN TRUE ELSE FALSE END' at line 3
Strong with this one, the sudo is.

Afficher de l'information

  • Total des messages de ce sujet: 4 messages
  • Utilisateurs parcourant ce forum: Aucun utilisateur enregistré et 122 invités
  • Vous ne pouvez pas poster de nouveaux sujets
  • Vous ne pouvez pas répondre aux sujets
  • Vous ne pouvez pas éditer vos messages
  • Vous ne pouvez pas supprimer vos messages
  • Vous ne pouvez pas joindre des fichiers
 
 

© 2011 Unmelted, LLC. Ozzu® est une marque déposée de Unmelted, LLC