Comparaison sur plusieurs tables

Résolu
flopad Messages postés 528 Date d'inscription mercredi 28 septembre 2005 Statut Membre Dernière intervention 6 mars 2009 - 23 mars 2006 à 13:52
flopad Messages postés 528 Date d'inscription mercredi 28 septembre 2005 Statut Membre Dernière intervention 6 mars 2009 - 27 mars 2006 à 09:52
Bonjour,

je dois développer une "appli" en php/sql. J'ai un masque de saisie qui me permet d'entrer des infos dans une de mes bdd. Seulement, chaque élément que je crée doit avoir un numéro unique, quelle que soit la table ou il va être enregistré. Comment est ce que je peux regarder dans toutes les tables, prendre le numéro affecté le plus élevé, et lui ajouter +1 pour incrémenter à chaque nouvel enregistrement?

Merci d'avance pour vos réponses!!

15 réponses

malalam Messages postés 10839 Date d'inscription lundi 24 février 2003 Statut Membre Dernière intervention 2 mars 2010 25
23 mars 2006 à 16:51
;-) lol
Mais je ne suis pas sûr de ma requête...ceci dit, un truc dans le genre fonctionnera de toutes façons.
3
malalam Messages postés 10839 Date d'inscription lundi 24 février 2003 Statut Membre Dernière intervention 2 mars 2010 25
23 mars 2006 à 14:28
Hello,

heu, ça s'appelle un id autoincrement cve que tu veux, et ça se fait tout seul.
Sous mysql, c'est 'autoincrement'
Sous sql server VF c'est 'compteur'
0
flopad Messages postés 528 Date d'inscription mercredi 28 septembre 2005 Statut Membre Dernière intervention 6 mars 2009
23 mars 2006 à 14:31
oui mais est ce que ca s'auto incrémente en tenant compte de toutes les bases de la table?
Per exemple, si il y a une ligne qui a pour numéro 10, il faut qu'aucune autre ligne d'aucune table n'ai le même numéro.
0
krolenain Messages postés 149 Date d'inscription lundi 7 février 2005 Statut Membre Dernière intervention 6 février 2009 1
23 mars 2006 à 14:32
salut, je pense qu'il faudrait faire:

SELECT id FROM table1, table2, ... WHERE id >= ALL(SELECT id FROM table1,table2,...);

Apres tu incrémentes ton résultat et enfin tu stock ton nouvel enregistrement en récupérant ton ID incrémentée.

Bonne chance
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
malalam Messages postés 10839 Date d'inscription lundi 24 février 2003 Statut Membre Dernière intervention 2 mars 2010 25
23 mars 2006 à 14:39
Ouai smais ça va être méga lourd ça.
Pourquoi tu as besoin de ça...? un id unique sur un ensemble de tables...?

Bref oui, la solution de Kronelain est adaptée , mais très lourde...selon le nombre de tables et d'entrées dans chaque table.

Moi je la jouerai autrement finalement :
tu crées une table spéciale : id_uniques.

Chaque fois que tu crées une ligne d'une table, tu prends la dernières valeur présente dans cette table , tu incrémenhtes de 1, ET tu ajours ton nouvel id dans la table id_uniques.
Ca permettra au moins de ne recherche que sur 1 table à chaque fois.
0
krolenain Messages postés 149 Date d'inscription lundi 7 février 2005 Statut Membre Dernière intervention 6 février 2009 1
23 mars 2006 à 14:42
t'as raison malalam,
en cas de grosse base (voire dans tous les cas) t'as solution est mieux!
0
flopad Messages postés 528 Date d'inscription mercredi 28 septembre 2005 Statut Membre Dernière intervention 6 mars 2009
23 mars 2006 à 15:53
D'accord, merci pour l'info, par contre, au niveau requete, ca donnerait quoi pour créer cette table id_unique?

CREATE TABLE id_unique (id INT not null AUTO_INCREMENT, PRIMARY KEY (id)) ??

Par contre, pour les autres tables, il ne faut pas que l'id soit en AUTO_INCREMENT donc?
0
malalam Messages postés 10839 Date d'inscription lundi 24 février 2003 Statut Membre Dernière intervention 2 mars 2010 25
23 mars 2006 à 15:58
Très exactement...!
0
krolenain Messages postés 149 Date d'inscription lundi 7 février 2005 Statut Membre Dernière intervention 6 février 2009 1
23 mars 2006 à 15:59
tu as tout juste, apres a chaque fois que tu enregistre un truc oublie pas de faire un insert dans ta table id_unique et de recuperer l'id de cette table pour la mettre en id de ton enregistrement et ca devrait tourner.
0
flopad Messages postés 528 Date d'inscription mercredi 28 septembre 2005 Statut Membre Dernière intervention 6 mars 2009
23 mars 2006 à 16:36
Quelle va être ma syntaxe pour l'INSERT? de manière à juste ajouter 1 à chaque enregistrement?
0
malalam Messages postés 10839 Date d'inscription lundi 24 février 2003 Statut Membre Dernière intervention 2 mars 2010 25
23 mars 2006 à 16:41
Ben ça dépend pas mal de la bdd que tu utilises, en fait.

Un truc du genre INSERT INTO table (id, machin) VALUES ((SELECT MAX(id) FROM id_unique) +1, 'truc' )

je ne suis pas très sûr de moi, mais le principe est là.
0
krolenain Messages postés 149 Date d'inscription lundi 7 février 2005 Statut Membre Dernière intervention 6 février 2009 1
23 mars 2006 à 16:43
SELECT id FROM id_unique WHERE id >= ALL(select id from id_unique)

apres tu recupere ton résultat dans $id
puis tu fais $id = $id + 1

et enfin

INSERT INTO tatable (id, tes autres noms de champ) values ('$id', tes autres données)

bon j'attends que malalam me dise qu'il y a mieux mais bon... lol
0
krolenain Messages postés 149 Date d'inscription lundi 7 février 2005 Statut Membre Dernière intervention 6 février 2009 1
23 mars 2006 à 16:44
!!! il a meme pas besoin de me le dire, il fait mieux direct et avant! lol
0
flopad Messages postés 528 Date d'inscription mercredi 28 septembre 2005 Statut Membre Dernière intervention 6 mars 2009
24 mars 2006 à 16:19
Salut!!, je ne comprends pas, ca ne me récupère pas la valeur de redac, vous avez une idee...?
Au passage, est ce que les requetes vous paraissent bonnes?

PAGE Ajout_observation.php :
<form name="Ajout_observation" action="Ajout_observation2.php" method="POST">
<!--Création de la liste déroulante Rédacteur-->
<td>Rédacteur</td>
<td>
<select name="redac">
<option value="ATH">a</option>
<option value="ABO">b</option>
<option value="BZO">c</option>
<option value="CLA">d</option>
<option value="GVE">e</option>
<option value="JPI">f</option>
<option value="JES">g</option>
<option value="JAM">h</option>
<option value="LSA">i</option>
<option value="MTE">j</option>
</td>
</select>

PAGE Ajout_observation2.php
<?php
include('Config.php');
$base = "base_amelio";


//Récupération des valeurs des champs:
//Rédacteur:
$redac = $_POST["redac"] ;


//Connexion à la base de données


$db = mysql_connect($host,$user,$password) or die("Impossible de se connecter");

if (!mysql_select_db( "$base",$db))

echo "Erreur : impossible de sélectionner la base
";


//création de la requête SQL:

if (isset($_POST['redac']))
{

$sql = "INSERT INTO $base (redac) VALUES ('$redac')";

$result = mysql_query($sql);

$sql = "INSERT INTO $base (numero) VALUES ((SELECT MAX(id) FROM id_unique) +1, 'id' )";

$result = mysql_query($sql);

}
else
{
echo 'Vous n\'avez pas sélectionné de rédacteur' ;
}
?>
0
flopad Messages postés 528 Date d'inscription mercredi 28 septembre 2005 Statut Membre Dernière intervention 6 mars 2009
27 mars 2006 à 09:52
C'est bon, ce problème est réglé!
Par contre, comment est ce que je dois faire pour qu'après avoir écrit le numéro unique dans la table id_unique, j'ajoute le rédacteur et en même temps je copie ce numéro dans le champ numéro de l'autre table...?
0
Rejoignez-nous