Soustraction entre tables de deux bases différentes.

Soustraction entre tables de deux bases différentes. - SQL/NoSQL - Programmation

Marsh Posté le 20-09-2008 à 20:12:12    

Voila j'ai deux bases de données (la deuxième est la copie de la première sept jour avant).
Je voudrais voir l'évolution d'un des paramétres (valeur numérique) en faisant la soustraction entre la valeur actuelle et la valeur sept jour avant.
 

Code :
  1. $bd=mysql_connect($bd_host, $bd_user, $bd_pass);
  2. $bd1=mysql_connect($bd_host, $bd_user, $bd_pass, true);
  3. mysql_select_db($bd_name,$bd);
  4. mysql_select_db($bd_name1,$bd1);
  5. .........................
  6. $res = mysql_query($req_last_art, $bd);
  7. $res1 = mysql_query($req_last_art1, $bd1);
  8. $line = mysql_fetch_array($res);
  9. $line1 = mysql_fetch_array($res1);
  10. while($line = mysql_fetch_array($res)){
  11. while($line1 = mysql_fetch_array($res1)){
  12. ........
  13. }}


 
Le problème c'est que ca ne tourne que sur la deuxième base (bd1), la première (bd) reste toujours la sa dernière ligne, elle ne change pas de valeur :/
 
Merci de m'aider :jap:


Message édité par gathor le 20-09-2008 à 21:02:28
Reply

Marsh Posté le 20-09-2008 à 20:12:12   

Reply

Marsh Posté le 20-09-2008 à 21:03:52    

Alors j'ai trouvé la solution a mon problème, mais pas de la plus belle manière qu'il soit ...
J'ai ajouté un "mysql_data_seek($res1,0);" a la fin de la première boucle ...
 
Est-il possible de faire ce genre de requete directement en Mysql :??:
 
Merci bien

Reply

Marsh Posté le 21-09-2008 à 11:44:52    

1) C'est un problème de php, pas de sql.
2) Le "la première (bd) reste toujours la sa dernière ligne" je pense que ça vient de toi. Montre tes requêtes et le contenu de tes while() imbriqués, et ce que tu voudrais obtenir.
3) Non on ne peut pas interroger deux bases à la fois à ma connaissance.


---------------
Can't buy what I want because it's free -
Reply

Marsh Posté le 23-09-2008 à 17:07:13    

1) pas mieux
2) pareil, par contre j'ai vu qu'il a trouvé comment faire marcher son code (mysql_data_seek étant bien une solution)
3) On peut très bien interroger plusieurs bases de données situé sur plusieurs serveurs différents (ou sur le même) dans le même code et sans ouvrir et fermer les liaisons à chaque requête. Il faut juste préciser l'identifiant de connexion à chaque fois qu'on demande quelque chose à l'une des bases de données.
 
gathor > D'après ton code tes deux bases sont sur le même serveur et accessible avec le même utilisateur. Tu aurais très bien pu utiliser une seule connexion au serveur de base de donnée en sélectionnant une des deux bases, en faisant ensuite la requête correspondante puis en sélectionnant la seconde base (ou, ce qui marche avec mysql, en précisant la base devant le nom de la table dans la partie FROM de la requête) et en exécutant la seconde requête. Cette solution marche normalement avec toutes les bonnes bases de données. A noter que ça fonctionne par ce que le php attend d'avoir reçu toutes les données avant de poursuivre l'exécution du code.
En plus de ça ton serveur de base de donnée est mysql alors tu aurais même pu faire une requête qui travaille directement sur les deux bases à la fois. Ca te donne une requête du genre

Code :
  1. SELECT t1.nom,t1.nombre-t2.nombre FROM base1.table1 AS t1,base2.table2 AS t2 WHERE t1.id=t2.id AND ...

ou

Code :
  1. SELECT t1.nom,t1.nombre-t2.nombre FROM base1.table1 t1 JOIN base2.table2 t2 ON t1.id=t2.id

Cette solution par contre ne marche pas avec tous les serveurs de bases de données. Je me demande même si ça n'est pas unique à mysql.

Reply

Marsh Posté le 23-09-2008 à 17:50:53    

Pour le 3) je pense qu'il voulait interroger plusieurs bases dans la même requête, sinon évidemment c'est possible :D

 

[edit]

 

...et mysql el permet, tiens donc!

Message cité 1 fois
Message édité par skeye le 23-09-2008 à 17:51:20

---------------
Can't buy what I want because it's free -
Reply

Marsh Posté le 23-09-2008 à 18:12:20    

skeye a écrit :

Pour le 3) je pense qu'il voulait interroger plusieurs bases dans la même requête, sinon évidemment c'est possible :D
 
[edit]
 
...et mysql el permet, tiens donc!

Et oui. D'ailleurs je me suis pas privé de cette solution quand j'en ai eu besoin. :sol:

Reply

Marsh Posté le 23-09-2008 à 18:17:58    

omega2 a écrit :

Et oui. D'ailleurs je me suis pas privé de cette solution quand j'en ai eu besoin. :sol:


Je crois pas que ça existe ailleurs...c'est étrange, comme comportement.


---------------
Can't buy what I want because it's free -
Reply

Marsh Posté le 23-09-2008 à 18:31:31    

euh... sql server et oracle le permettent depuis au moins 15 ans ;)

Reply

Marsh Posté le 23-09-2008 à 18:33:36    

MagicBuzz a écrit :

euh... sql server et oracle le permettent depuis au moins 15 ans ;)


euh, directement sans rien toucher?[:pingouino]
On doit pas parler de la même chose, là, si tu peux interroger dans la même requête 2 SID oracle différents sans faire un dblink tu me préviens, hein, ça m'intéresse.[:dawa]


Message édité par skeye le 23-09-2008 à 18:35:33

---------------
Can't buy what I want because it's free -
Reply

Marsh Posté le 24-09-2008 à 01:44:26    

dans sql server, c'est pas plus compliqué que ça :
 
select NomBase1.NomUser1.NomTable1.NomChamp1 from NomBase1.NomUser1.NomTable1
 
:spamafote:
 
après, si la seconde base n'est pas sur le même serveur, faurt juste faire un partenariat.
 
oracle, pas testé, ceci dit, tu vas pas me dire que c'est compliqué de faire un dblink...

Reply

Marsh Posté le 24-09-2008 à 01:44:26   

Reply

Marsh Posté le 24-09-2008 à 01:48:56    

Code :
  1. SELECT *
  2. FROM sandbox..a a
  3. INNER JOIN Devis..soc s
  4. ON a.id = s.codsoc


 
(le user est facultatif)
 
à savoir qu'un niveau suppérieur existe pour interroger un serveur partenaire, il suffit de mettre son nom en préfixe :spamafote:
 
ça marche comme ça depuis au moins SQL Server 7.0, jamais jamais testé avec le 6.5. M'enfin le 7.0 ça remonte déjà à 1998 à tout péter.
 
sql server gère les transactions entre les bases, les procédures stockées et triggers aussi peuvent inter-oppérer entre bases, avec quelques limitations toutefois


Message édité par MagicBuzz le 24-09-2008 à 01:50:40
Reply

Marsh Posté le 24-09-2008 à 08:01:18    

MagicBuzz a écrit :

oracle, pas testé, ceci dit, tu vas pas me dire que c'est compliqué de faire un dblink...


 
c'est pas compliqué, mais pas trivial non plus. Et ça marche pour un user donné, etc...[:skeye]


---------------
Can't buy what I want because it's free -
Reply

Marsh Posté le 24-09-2008 à 10:28:33    

C'est cool, j'apprends plein de choses ... et c'est con, je suis sur que le jour où j'en aurais besoin je passerais un bon moment avant de retrouver les bonnes infos.

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed