INSERT INTO && INNER JOIN

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 : INSERT INTO && INNER JOIN

par Sebe » 03 oct. 2007, 22:14

... implicitement castables, (a castable en c1, b castable en c2)...
Oh la la la :shock:
sinon sans explicitement utiliser les fonctions transtypage tu auras un erreur.
huchhhhh ... comprends pas grand chose :shock:
Si tu veux un peu plus d'aide, file ta structure de table, et les informations que tu souhaites collecter pour insertion.
Je veux bien en effet ! Voici ma table dans laquelle je reçois les informations:

Code : Tout sélectionner

CREATE TABLE IF NOT EXISTS `#__cat_coach` ( `id` INT NOT NULL AUTO_INCREMENT `user_id` INT NOT NULL, `coach_id` INT NOT NULL, PRIMARY KEY(`id`) ) TYPE=MyISAM;
Après validation de mon formulaire, j'ai fait une fonction qui me permet d'enregistrer les données dans ma table:
function cat_save_coach() {
	global $database, $mosConfig_live_site, $Itemid;

	$user_id = $_POST['user_id'];
	$coachs = trim($_POST['coach']);// au cas où sans JS !

	$coach = explode(',', $coachs);
	
	$query = "DELETE FROM #__cat_coach"
		. "\n WHERE user_id='$user_id'"
		;
	$database->setQuery($query);
	if (!$database->query()) {
		echo "<script> alert('".$database->getErrorMsg()."'); window.history.go(-1); </script>n";
			}
	
	if ($coachs != '') { // pas de coach
		echo "<script> alert('Vous avez déclarer " . $coachs . " comme coach(s)'); </script>";
		foreach($coach as $value) {
			$query = "INSERT INTO #__cat_coach"
					//. "\n INNER JOIN #__users ON username = '$value'"
					. "\n SET user_id='$user_id', coach='$value'"
					;
			$database->setQuery( $query );
			$database->query();
			}
		}else{
			echo "<script> alert('Vous n\'avez pas déclarer de coach'); </script>";
			}
	
	$link = 'index.php?option=com_cattest';
	// Adds parameter handling
	if( $Itemid > 0 && $Itemid != 99999999 ) {
		$link .= '&Itemid=' . $Itemid;
	}

	$link .= '&task=coaching';	
	
	mosRedirect($link, _ENRSAV);
        }
Il y a 2 choses à savoir:
  • Comme on peut l'imaginer '$coach' et un tableau de type 'array'. C'est pour cela que je ai mis l'enregistrement dans un 'foreach'.
    La table où je vais faire la comparaison pour récupérer l'id correspond à l'username est la table '#__users'
[/code]

Voilà, je pense avoir tout donné ... d'avance, je te remercie parce que là, moi, je suis complètement dépassé :!:

par Tracker » 03 oct. 2007, 21:46

La syntax
INSERT [LOW_PRIORITY | DELAYED] [IGNORE]
[INTO] tbl_name [(col_name,...)]
SELECT ...
te laisse la possibilité d'inserer des éléments dans une table à partir d'un select, ex:
insert table1 (c1, c2) select a, b from ...
la contrainte étant que les champs soient implicitement castables, (a castable en c1, b castable en c2) sinon sans explicitement utiliser les fonctions transtypage tu auras un erreur.

Si tu veux un peu plus d'aide, file ta structure de table, et les informations que tu souhaites collecter pour insertion.

par Sebe » 03 oct. 2007, 20:24

Salut,

J'ai trouvé un truc ici mais j'avouerai franchement ne pas trop comprendre !

Peut-être que tu aurais un lien un peu plus explicite ... enfin pour un non-averti !

Merci

par Tracker » 03 oct. 2007, 10:58

Regarde la doc de mysql, tu trouveras la syntax:
INSERT [LOW_PRIORITY | DELAYED] [IGNORE]
[INTO] tbl_name [(col_name,...)]
SELECT ...
Bonne journée...

INSERT INTO && INNER JOIN

par Sebe » 03 oct. 2007, 10:17

Bonjour,

Je voudrais savoir comment je peux insérer dans une table l'id d'une autre ?
Voici ma requête de base qui fonctionne:
foreach($coach as $value) {
	$query = "INSERT INTO #__cat_coach"
		. "\n SET user_id='$user_id', coach='$value'"
					;
	$database->setQuery( $query );
	$database->query();
	}
Il sera enregistré, dans le champ 'coach', l'username d'un utilisateur mais je voudrai plutôt renvoyer son id provenant de la table #__users.
J'avais pensé ajouter :
 "\n INNER JOIN #__users ON username = '$value'"
mais plus rien ne fonctionne !

Quelqu'un peut-il m'aider ?

Merci