Page 1 sur 1

Comparer 2 lignes d une BDD

Posté : 28 avr. 2006, 11:58
par freepopo
Bonjour,
Y a til un moyen (simple)pour comparer si deux lignes de deux table différentes diffèrent ne serais-ce que par un champ ?

Dans le cadre d un gros projet, je dois copier des lignes dune table a une autre avec un insert mais dabord verifier si celle-ce existe deja. Si la cle primaire est deja dans la 2 eme table, je dois verifier si cette ligne a ete mise a jour auquel cas, je supprime l ancienne et insert la nouvelle.

Au debut je pensais faire sa avec des varaibles PHP et les tester a chaque fois mais il y aurait 40 variables et en plus, il fautdrais se connecter a deux bases et tables différentes.

Voila, je vous remercie par avance pour toute l aide que vous m aporterez.

PS : qqun sait pourquoi des que je veux mettre un apostrophe, sa me lance la recherche rapide de firefox (sa me le fait uniquement sur ce forum), normalement le raccourci c est control+F ?

Posté : 28 avr. 2006, 12:00
par ouckileou
Pas la peine de poster 2 fois, un post dans le bon forum sera lu par les personnes compétentes et/ou intéressées, et ça suffit bien

Posté : 28 avr. 2006, 13:42
par freepopo
Toutes mes excuses.

Quelqu'un sait il si ce que j'essaye de faire est possible ou pas ?

Posté : 28 avr. 2006, 13:58
par Vaedan
Bonjour

La requête :

Code : Tout sélectionner

SELECT a.champ, b.champ FROM table1 a, table2 b WHERE a.champ = b.champ
Le PHP :
if ( mysql_num_rows( $ton_resultat_mysql_query ) > 0 )
{
    // Champs identiques
}

Posté : 28 avr. 2006, 14:00
par ouckileou
Sur ce principe, autant ne pas sélectionner les valuers si on en a pas besoin, et remplacer mysql_num_rows par un COUNT(*) dans la requête ;)

Posté : 28 avr. 2006, 14:13
par Vaedan
Je ne suis pas d'accord pour le count car apres por savoir s'il a trouvé quelquechose tu dois effectuer un mysql_fetch_*(), or dans mon cas, non :P

Posté : 28 avr. 2006, 14:23
par freepopo
Vaedan, ta méthode semble bien marcher, j'm'en vais la tester et vive les apostrophes ! (les invités sur le forum n'ont pas le droit aux apostrophes ?)

Posté : 28 avr. 2006, 14:30
par ouckileou
Je ne suis pas d'accord pour le count car apres por savoir s'il a trouvé quelquechose tu dois effectuer un mysql_fetch_*(), or dans mon cas, non :P
Oui, et alors ? :shock:

Je préfère utiliser un mysql_fetch_*() pour récupérer 1 entier, que éventuellement récupérer le contenu de 40 colonnes qui ne me serviront à rien pour compter ensuite :roll:

Si tu as besoin de connaître un nombre de lignes, un COUNT() est bien plus indiqué je trouve, m'enfin pour ce que j'en dit...

Posté : 28 avr. 2006, 14:50
par Ryle
Je suis tout à fait d'accord avec oukileou, le count() est la fonction la plus optimisée sur une base de données. Elle est plus rapide, moins couteuse en ressource et ne ramene effectivement pas d'enregistrement inutiles...

Et je pense que le mysql_fetch sur un seul champ est également plus interessant que le count, même si cela nécessite une instruction de plus, vu que le resultSet retourné occupera moins de place en mémoire :)

count(*) powa' ! ;)

Posté : 28 avr. 2006, 15:08
par ouckileou
Solution 1 : mysql_num_rows()
$requete = "SELECT a.champ, b.champ FROM table1 a, table2 b WHERE a.champ = b.champ";
$exec = mysql_query($requete);

$nb = mysql_num_row($exec);
echo $nb;
Solution 2 : COUNT
$requete = "SELECT aCOUNT(*) AS nb FROM table1 a, table2 b WHERE a.champ = b.champ";
$exec = mysql_query($requete);

$result = mysql_fetch_array($exec, MYSQL_ASSOC);
echo $result['nb'];
4 lignes dans les 2 cas, pas d'instruction en plus ;)