Page 1 sur 1

INSERT INTO && INNER JOIN

Posté : 03 oct. 2007, 10:17
par Sebe
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

Posté : 03 oct. 2007, 10:58
par Tracker
Regarde la doc de mysql, tu trouveras la syntax:
INSERT [LOW_PRIORITY | DELAYED] [IGNORE]
[INTO] tbl_name [(col_name,...)]
SELECT ...
Bonne journée...

Posté : 03 oct. 2007, 20:24
par Sebe
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

Posté : 03 oct. 2007, 21:46
par Tracker
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.

Posté : 03 oct. 2007, 22:14
par Sebe
... 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é :!: