INSERT INTO && INNER JOIN

Mammouth du PHP | 545 Messages

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
Sebe

Pour moi, le PHP est une nouvelle aventure qui a commencée fin octobre 2005 ... c'est plus exitant que le HTML!

Eléphant du PHP | 443 Messages

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...

Mammouth du PHP | 545 Messages

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
Sebe

Pour moi, le PHP est une nouvelle aventure qui a commencée fin octobre 2005 ... c'est plus exitant que le HTML!

Eléphant du PHP | 443 Messages

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.

Mammouth du PHP | 545 Messages

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é :!:
Sebe

Pour moi, le PHP est une nouvelle aventure qui a commencée fin octobre 2005 ... c'est plus exitant que le HTML!