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