Plusieurs informations dans la clause WHERE !

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : Plusieurs informations dans la clause WHERE !

Re: Plusieurs informations dans la clause WHERE !

par Ryle » 12 juil. 2012, 00:11

Et si tu fais un print_r( $row['poll_option_id'] ); pour voir ce que contient ta variable, tu obtiens quoi ?

Sachant que tu devrais obtenir un array ( ...) s'il s'agit bien d'un tableau d'id. SI tu n'as pas un tableau, le implode ne pourra pas fonctionner...

Re: Plusieurs informations dans la clause WHERE !

par YADev » 11 juil. 2012, 15:43

Ok, je me coucherais mon bête. :P

Ma requête est donc comme-ci :
				$sql_date = 'UPDATE ' . POLL_OPTIONS_TABLE . "
					SET poll_option_total = poll_option_total -1
					WHERE poll_option_id IN (" . implode(',', $row['poll_option_id']) . ") 
					AND topic_id = '" . (int) $topic . "'";
Soucis, $row[''] contient bien ce qu'on lui demande, quand il est seul il affiche bien une valeur, mais quand on l'entoure d'implode il devient vide et IN devient l'équivalent de IN () :| Le format utilisé est incorrect ? Sachant que la variable contient plusieurs IDs :?:

Re: Plusieurs informations dans la clause WHERE !

par Ryle » 09 juil. 2012, 20:50

Quand tu fais un select, tu peux effectivement interroger plusieurs tables... en revanche tu ne peux pas mettre à jour ou insérer des données dans plusieurs tables simultanément.

Re: Plusieurs informations dans la clause WHERE !

par YADev » 08 juil. 2012, 15:43

Une à la fois ? Pourtant ça marche habituellement quand je veux faire sur 2 à la fois via les préfixes là.. Non :?:
UPDATE phpbb_poll_options o, phpbb_topics t

Re: Plusieurs informations dans la clause WHERE !

par Ryle » 08 juil. 2012, 14:46

Un update ne se fait que sur une seule table à la fois...

Et effectivement, pour la syntaxe, tu dois obtenir quelque chose de la forme " IN (3, 35, 90) "
Il n'y a pas d'apostrophes, pas de virgule toute seule, ... il faut donc adapter ton code pour obtenir ce résultat à partir des ids que tu récupères :)

Re: Plusieurs informations dans la clause WHERE !

par Adanorm » 08 juil. 2012, 13:00

Tu as visualisé $row['poll_option_id'] ? Tu es sur qu'il est séparé par des "," ?

Re: Plusieurs informations dans la clause WHERE !

par YADev » 08 juil. 2012, 12:57

Apparement j'ai une erreur de syntaxe, car du coup pour utiliser IN je fais ça dans ma clause WHERE :
AND o.poll_option_id IN ('" . rtrim($row['poll_option_id'], ', ') . "') 
Mais via phpMyAdmin, quand je tente de rentrer la requête pure j'ai une erreur :
UPDATE phpbb_poll_options o, phpbb_topics t

						SET o.poll_option_total = o.poll_option_total -1, t.poll_last_vote = 0, t.poll_vote_change = 0
						WHERE o.poll_option_id IN (2, 3) 
						AND o.topic_id = 8
						AND t.topic_id = 8
Est-ce le fait de préciser les préfixe o et t ?

Re: Plusieurs informations dans la clause WHERE !

par Ryle » 07 juil. 2012, 20:39

Il te faut soit utiliser des instructions OR
WHERE poll_option_id = 5 OR poll_option_id = 6 OR poll_option_id = 8 ...
Soit plus simplement utiliser un IN()
WHERE poll_option_id IN (5, 6, 8)

Plusieurs informations dans la clause WHERE !

par YADev » 07 juil. 2012, 19:52

Bonjour,

Dans une requête SQL, je dois mettre à jour un champ.
Dans ma clause WHERE, je dois dire "si l'ID est égal à". Rien de difficile : WHERE poll_option_id = $row['poll_option_id']

Mais il se trouve qu'il ne s'agit pas d'un seul ID, j'en récupère plusieurs (6, 78, 34, ...) et j'aimerais savoir comment faire pour exécuter cette requête en les prenant tous en compte. On peux pas faire WHERE = 6,78,43 et quand je fais une boucle while ça marche pas...
				$sql = 'SELECT poll_option_id
					FROM ' . POLL_VOTES_TABLE . "
					WHERE topic_id = '" . (int) $topic . "' AND vote_user_id = '" . (int) $supp . "'";
				$result = $db->sql_query($sql);		
								
				while ($row = $db->sql_fetchrow($result))
				{
					$sql_change = 'UPDATE ' . POLL_OPTIONS_TABLE . ' o, ' . TOPICS_TABLE . " t
						SET o.poll_option_total = o.poll_option_total -1, t.poll_last_vote = 0, t.poll_vote_change = 0
						WHERE o.topic_id = '" . (int) $topic . "' 
						AND o.poll_option_id = '" . (int) $row['poll_option_id'] . "' 
						AND t.topic_id = '" . (int) $topic . "'";	
					$result_change = $db->sql_query($sql_change);		
					$db->sql_freeresult($sql_change);	
				}
Une idée ? :(