Bonjour,
Je viens sollicité votre aide suite à "un petit problème" avec mon script ou du moins son écriture... 
En effet, je travaille avec deux tables SQL :
- criter_live qui est actualisé automatiquement toutes les X minutes avec AJAX
- worksheets qui est remplie de manière manuelle par un utilisateur
Avant d'aller plus loin, je vous ajoute le schéma de ma base de données :
+--------------------------------------------------------------------------------------+
| criter_live & worksheets |
+--------------------------------------------------------------------------------------+
| id | machine_id | entry_number | machine_type | entry_date | left_date | left_number |
+----+------------+--------------+--------------+------------+-----------+-------------+
| 1 | 76801 | R88901 | -Z | timestamp | timestamp | S79980 |
+----+------------+--------------+--------------+------------+-----------+-------------+
| 2 | 82501 | R89874 | -X | timestamp | timestamp | S98780 |
+--------------------------------------------------------------------------------------+
Alors, mon problème... Je souhaite effectuer une comparaison entre ces deux tables en prenant pour points de départs tous les enregistrements dont entry_date est supérieur au timestamp du jour à minuit... L'objectif de ce script est de me retourner les lignes qui différent dans la table worksheets (par rapport à criter_live) afin d'y appliquer les modifications (les champs machine_id, machine_type, entry_date et left_date peuvent varier, de même qu'il peut manquer une ligne dans l'une des bases de données).
Pour effectuer des comparaisons et me retourner à chaque fois les enregistrements qui sont différents j'utilisais ce code (pour machine_id, entry_date et left_date) :
SELECT machine_id FROM criter_live WHERE entry_date > $currentdate_today_midnight AND machine_id NOT IN (SELECT machine_id FROM worksheets)
Sauf, que je peux avoir plusieurs machine_id le même jour mais qui pour autant n'ont pas le même entry_number ou left_number... Je précise que dans les deux tables on retrouvera les mêmes entry_number et left_number (sauf s'il manque une ligne qui n'est pas dans l'une des bases évidemment...).
Dans des cas concrets, si vous n'avez pas compris :
- Vérification de criter_live et worksheets : left_date pour une certaine entry_number est différent dans worksheets par rapport à la base de référence criter_live : application de la modification
- Vérification de criter_live et worksheets : entry_date pour une certaine entry_number est différent dans criter_live par rapport à la base de référence criter_live : application de la modification sur worksheets (on applique toujours les modifications sur worksheets)
- Vérification de criter_live et worksheets : un nouveau entry_number apparaît dans criter_live qui n'apparait pas dans worksheets : on applique la modification sur worksheets (nouvelle enregistrement en base)
- Vérification de criter_live et worksheets : un entry_number n'apparait plus dans criter_live mais existe dans worksheets : on applique la modification dans worksheets (suppression de l'enregistrement)
J'espère que vous aurez compris mon problème et sis vous avez des questions n'hésitez pas !
Merci !
Partager