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 :

Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
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