Bonjour,
Je sollicite votre aide dans le cadre d'une réflexion sur un algorithme (script PHP).
J'ai une TABLE (Microsoft SQL Server 2008) "IDENTITE" constituée des colonnes suivantes :
1 2 3 4 5 6 7 8 9
| CREATE TABLE [IDENTITE](
[IDI_ID] [int] IDENTITY(1,1) NOT NULL, [PK]
[IDI_F1] [varchar] NULL,
[IDI_F2] [varchar](25) NULL,
[IDI_M1] [varchar](25) NULL,
[IDI_M2] [varchar](25) NULL,
[IDI_FORMULA] [varchar](25) NULL,
[IDI_NAME] [varchar](25) NULL
) |
La colonne "IDI_ID" est l'identifiant unique de la table (identity).
Les colonnes "IDI_F1", "IDI_F2", "IDI_M1", "IDI_M1" sont les parents potentiels de mon identifiant.
La colonne "IDI_FORMULA" est la combinaison des colonnes parents : IDI_F1.IDI_F2/IDI_M1.IDI_M2 ou IDI_F2.IDI_F1/IDI_M2.IDI_M1
La colonne "IDI_NAME" est un nom commun que l'on attribut à mon identifiant.
Objectif :
L'objectif du script est de rechercher si les parents passés en paramètres de mon script existe dans la table "IDENTITE", sachant qu'il faut tester toutes les combinaisons possibles, soit 8 avec au minimum deux parents et au maximum 4 parents.
Exemple :
Dans la table, j'ai la ligne suivante :
IDI_ID : 198587
IDI_F1 : TITI
IDI_F2 : TUTU
IDI_M1 : TOTO
IDI_M2 : TKTK
IDI_FORMULA : TITI.TUTU/TOTO.TKTK
IDI_NAME : JML
Je veux donc rechercher cette ligne mais les paramètres passés sont :
IDI_F1 : TUTU
IDI_F2 : TITI
IDI_M1 : TKTK
IDI_M2 : TOTO
IDI_FORMULA : TUTU.TITI/TKTK.TOTO
La formule est inversée donc je ne trouverai jamais ma ligne et pourtant elle existe bien.
Je pensais donc pour un paramètre, tester 8 requêtes avec des wheres représentants les 8 combinaisons possibles ou sinon faire un where avec les 8 combinaisons imbriquées par un OR.
Sachant que la table fait environ 800 000 lignes et que la recherche peut contenir 1000 formules à identifier ... Je souhaiterai un peu de votre aide
!
Si vous voulez plus de précisions, je me tiens à votre disposition.
Cordialement
Partager