[RESOLU] Combinaison en php ?

Eléphanteau du PHP | 10 Messages

20 févr. 2013, 02:51

Bonjour tout le monde,


J'ai une requête SQL qui varie en fonction de la présence de un ou de plusieurs mots prédéfinit dans une phrase, avec un maximum de 8 mots. Peu importe l'ordre des mots dans ma phrase.

(Les mots en question étant MNK, PLD, WAR, BRD, DRG, BLM, WHM et SMN).

Pour le moment, j'ai essayé de les gérer comme ceci (j'ai inversé l'ordre dans lequel je l'ai écris dans mon fichier pour faciliter la lecture):
		// Combinaisons à 1 possibilité
		else if ( preg_match('/MNK/', $row2['sdesc']) ){$requete = 'WHERE MNK = 1';}
		else if ( preg_match('/PLD/', $row2['sdesc']) ){$requete = 'WHERE PLD = 1';}
		else if ( preg_match('/WAR/', $row2['sdesc']) ){$requete = 'WHERE WAR = 1';}
		else if ( preg_match('/BRD/', $row2['sdesc']) ){$requete = 'WHERE BRD = 1';}
		else if ( preg_match('/DRG/', $row2['sdesc']) ){$requete = 'WHERE DRG = 1';}
		else if ( preg_match('/BLM/', $row2['sdesc']) ){$requete = 'WHERE BLM = 1';}
		else if ( preg_match('/WHM/', $row2['sdesc']) ){$requete = 'WHERE WHM = 1';}
		else if ( preg_match('/SMN/', $row2['sdesc']) ){$requete = 'WHERE SMN = 1';}

		// Combinaisons à 2 possibilités
		else if ( preg_match('/WHM/', $row2['sdesc']) && preg_match('/SMN/', $row2['sdesc']) ){$requete = 'WHERE WHM = 1 OR SMN = 1';}
		else if ( preg_match('/BLM/', $row2['sdesc']) && preg_match('/WHM/', $row2['sdesc']) ){$requete = 'WHERE BLM = 1 OR WHM = 1';}
		else if ( preg_match('/BLM/', $row2['sdesc']) && preg_match('/SMN/', $row2['sdesc']) ){$requete = 'WHERE BLM = 1 OR SMN = 1';}
		else if ( preg_match('/DRG/', $row2['sdesc']) && preg_match('/BLM/', $row2['sdesc']) ){$requete = 'WHERE DRG = 1 OR BLM = 1';}
		else if ( preg_match('/DRG/', $row2['sdesc']) && preg_match('/WHM/', $row2['sdesc']) ){$requete = 'WHERE DRG = 1 OR WHM = 1';}
		else if ( preg_match('/DRG/', $row2['sdesc']) && preg_match('/SMN/', $row2['sdesc']) ){$requete = 'WHERE DRG = 1 OR SMN = 1';}
		else if ( preg_match('/BRD/', $row2['sdesc']) && preg_match('/DRG/', $row2['sdesc']) ){$requete = 'WHERE BRD = 1 OR DRG = 1';}
		else if ( preg_match('/BRD/', $row2['sdesc']) && preg_match('/BLM/', $row2['sdesc']) ){$requete = 'WHERE BRD = 1 OR BLM = 1';}
		else if ( preg_match('/BRD/', $row2['sdesc']) && preg_match('/WHM/', $row2['sdesc']) ){$requete = 'WHERE BRD = 1 OR WHM = 1';}
		else if ( preg_match('/BRD/', $row2['sdesc']) && preg_match('/SMN/', $row2['sdesc']) ){$requete = 'WHERE BRD = 1 OR SMN = 1';}
		else if ( preg_match('/WAR/', $row2['sdesc']) && preg_match('/BRD/', $row2['sdesc']) ){$requete = 'WHERE WAR = 1 OR BRD = 1';}
		else if ( preg_match('/WAR/', $row2['sdesc']) && preg_match('/DRG/', $row2['sdesc']) ){$requete = 'WHERE WAR = 1 OR DRG = 1';}
		else if ( preg_match('/WAR/', $row2['sdesc']) && preg_match('/BLM/', $row2['sdesc']) ){$requete = 'WHERE WAR = 1 OR BLM = 1';}
		else if ( preg_match('/WAR/', $row2['sdesc']) && preg_match('/WHM/', $row2['sdesc']) ){$requete = 'WHERE WAR = 1 OR WHM = 1';}
		else if ( preg_match('/WAR/', $row2['sdesc']) && preg_match('/SMN/', $row2['sdesc']) ){$requete = 'WHERE WAR = 1 OR SMN = 1';}
		else if ( preg_match('/PLD/', $row2['sdesc']) && preg_match('/WAR/', $row2['sdesc']) ){$requete = 'WHERE PLD = 1 OR WAR = 1';}
		else if ( preg_match('/PLD/', $row2['sdesc']) && preg_match('/BRD/', $row2['sdesc']) ){$requete = 'WHERE PLD = 1 OR BRD = 1';}
		else if ( preg_match('/PLD/', $row2['sdesc']) && preg_match('/DRG/', $row2['sdesc']) ){$requete = 'WHERE PLD = 1 OR DRG = 1';}
		else if ( preg_match('/PLD/', $row2['sdesc']) && preg_match('/BLM/', $row2['sdesc']) ){$requete = 'WHERE PLD = 1 OR BLM = 1';}
		else if ( preg_match('/PLD/', $row2['sdesc']) && preg_match('/WHM/', $row2['sdesc']) ){$requete = 'WHERE PLD = 1 OR WHM = 1';}
		else if ( preg_match('/PLD/', $row2['sdesc']) && preg_match('/SMN/', $row2['sdesc']) ){$requete = 'WHERE PLD = 1 OR SMN = 1';}
		else if ( preg_match('/MNK/', $row2['sdesc']) && preg_match('/PLD/', $row2['sdesc']) ){$requete = 'WHERE MNK = 1 OR PLD = 1';}	
		else if ( preg_match('/MNK/', $row2['sdesc']) && preg_match('/WAR/', $row2['sdesc']) ){$requete = 'WHERE MNK = 1 OR WAR = 1';}
		else if ( preg_match('/MNK/', $row2['sdesc']) && preg_match('/BRD/', $row2['sdesc']) ){$requete = 'WHERE MNK = 1 OR BRD = 1';}
		else if ( preg_match('/MNK/', $row2['sdesc']) && preg_match('/DRG/', $row2['sdesc']) ){$requete = 'WHERE MNK = 1 OR DRG = 1';}
		else if ( preg_match('/MNK/', $row2['sdesc']) && preg_match('/BLM/', $row2['sdesc']) ){$requete = 'WHERE MNK = 1 OR BLM = 1';}
		else if ( preg_match('/MNK/', $row2['sdesc']) && preg_match('/WHM/', $row2['sdesc']) ){$requete = 'WHERE MNK = 1 OR WHM = 1';}
		else if ( preg_match('/MNK/', $row2['sdesc']) && preg_match('/SMN/', $row2['sdesc']) ){$requete = 'WHERE MNK = 1 OR SMN = 1';}

		// Combinaisons à 3 possibilités
		else if ( preg_match('/BLM/', $row2['sdesc']) && preg_match('/WHM/', $row2['sdesc']) && preg_match('/SMN/', $row2['sdesc']) ){$requete = 'WHERE BLM = 1 OR WHM = 1 OR SMN = 1';}
		else if ( preg_match('/DRG/', $row2['sdesc']) && preg_match('/BLM/', $row2['sdesc']) && preg_match('/WHM/', $row2['sdesc']) ){$requete = 'WHERE DRG = 1 OR BLM = 1 OR WHM = 1';}
		else if ( preg_match('/DRG/', $row2['sdesc']) && preg_match('/WHM/', $row2['sdesc']) && preg_match('/SMN/', $row2['sdesc']) ){$requete = 'WHERE DRG = 1 OR WHM = 1 OR SMN = 1';}
		else if ( preg_match('/BRD/', $row2['sdesc']) && preg_match('/WHM/', $row2['sdesc']) && preg_match('/SMN/', $row2['sdesc']) ){$requete = 'WHERE BRD = 1 OR WHM = 1 OR SMN = 1';}
		else if ( preg_match('/BRD/', $row2['sdesc']) && preg_match('/BLM/', $row2['sdesc']) && preg_match('/WHM/', $row2['sdesc']) ){$requete = 'WHERE BRD = 1 OR BLM = 1 OR WHM = 1';}
		else if ( preg_match('/BRD/', $row2['sdesc']) && preg_match('/BLM/', $row2['sdesc']) && preg_match('/SMN/', $row2['sdesc']) ){$requete = 'WHERE BRD = 1 OR BLM = 1 OR SMN = 1';}
		else if ( preg_match('/BRD/', $row2['sdesc']) && preg_match('/DRG/', $row2['sdesc']) && preg_match('/BLM/', $row2['sdesc']) ){$requete = 'WHERE BRD = 1 OR DRG = 1 OR BLM = 1';}
		else if ( preg_match('/BRD/', $row2['sdesc']) && preg_match('/DRG/', $row2['sdesc']) && preg_match('/WHM/', $row2['sdesc']) ){$requete = 'WHERE BRD = 1 OR DRG = 1 OR WHM = 1';}
		else if ( preg_match('/BRD/', $row2['sdesc']) && preg_match('/DRG/', $row2['sdesc']) && preg_match('/SMN/', $row2['sdesc']) ){$requete = 'WHERE BRD = 1 OR DRG = 1 OR SMN = 1';}
		else if ( preg_match('/WAR/', $row2['sdesc']) && preg_match('/WHM/', $row2['sdesc']) && preg_match('/SMN/', $row2['sdesc']) ){$requete = 'WHERE WAR = 1 OR WHM = 1 OR SMN = 1';}
		else if ( preg_match('/WAR/', $row2['sdesc']) && preg_match('/BLM/', $row2['sdesc']) && preg_match('/WHM/', $row2['sdesc']) ){$requete = 'WHERE WAR = 1 OR BLM = 1 OR WHM = 1';}
		else if ( preg_match('/WAR/', $row2['sdesc']) && preg_match('/BLM/', $row2['sdesc']) && preg_match('/SMN/', $row2['sdesc']) ){$requete = 'WHERE WAR = 1 OR BLM = 1 OR SMN = 1';}
		else if ( preg_match('/WAR/', $row2['sdesc']) && preg_match('/DRG/', $row2['sdesc']) && preg_match('/BLM/', $row2['sdesc']) ){$requete = 'WHERE WAR = 1 OR DRG = 1 OR BLM = 1';}
		else if ( preg_match('/WAR/', $row2['sdesc']) && preg_match('/DRG/', $row2['sdesc']) && preg_match('/WHM/', $row2['sdesc']) ){$requete = 'WHERE WAR = 1 OR DRG = 1 OR WHM = 1';}
		else if ( preg_match('/WAR/', $row2['sdesc']) && preg_match('/DRG/', $row2['sdesc']) && preg_match('/SMN/', $row2['sdesc']) ){$requete = 'WHERE WAR = 1 OR DRG = 1 OR SMN = 1';}
		else if ( preg_match('/WAR/', $row2['sdesc']) && preg_match('/BRD/', $row2['sdesc']) && preg_match('/DRG/', $row2['sdesc']) ){$requete = 'WHERE WAR = 1 OR BRD = 1 OR DRG = 1';}
		else if ( preg_match('/WAR/', $row2['sdesc']) && preg_match('/BRD/', $row2['sdesc']) && preg_match('/BLM/', $row2['sdesc']) ){$requete = 'WHERE WAR = 1 OR BRD = 1 OR BLM = 1';}
		else if ( preg_match('/WAR/', $row2['sdesc']) && preg_match('/BRD/', $row2['sdesc']) && preg_match('/WHM/', $row2['sdesc']) ){$requete = 'WHERE WAR = 1 OR BRD = 1 OR WHM = 1';}
		else if ( preg_match('/WAR/', $row2['sdesc']) && preg_match('/BRD/', $row2['sdesc']) && preg_match('/SMN/', $row2['sdesc']) ){$requete = 'WHERE WAR = 1 OR BRD = 1 OR SMN = 1';}
		else if ( preg_match('/PLD/', $row2['sdesc']) && preg_match('/WHM/', $row2['sdesc']) && preg_match('/SMN/', $row2['sdesc']) ){$requete = 'WHERE PLD = 1 OR WHM = 1 OR SMN = 1';}
		else if ( preg_match('/PLD/', $row2['sdesc']) && preg_match('/BLM/', $row2['sdesc']) && preg_match('/WHM/', $row2['sdesc']) ){$requete = 'WHERE PLD = 1 OR BLM = 1 OR WHM = 1';}
		else if ( preg_match('/PLD/', $row2['sdesc']) && preg_match('/BLM/', $row2['sdesc']) && preg_match('/SMN/', $row2['sdesc']) ){$requete = 'WHERE PLD = 1 OR BLM = 1 OR SMN = 1';}
		else if ( preg_match('/PLD/', $row2['sdesc']) && preg_match('/DRG/', $row2['sdesc']) && preg_match('/BLM/', $row2['sdesc']) ){$requete = 'WHERE PLD = 1 OR DRG = 1 OR BLM = 1';}
		else if ( preg_match('/PLD/', $row2['sdesc']) && preg_match('/DRG/', $row2['sdesc']) && preg_match('/WHM/', $row2['sdesc']) ){$requete = 'WHERE PLD = 1 OR DRG = 1 OR WHM = 1';}
		else if ( preg_match('/PLD/', $row2['sdesc']) && preg_match('/DRG/', $row2['sdesc']) && preg_match('/SMN/', $row2['sdesc']) ){$requete = 'WHERE PLD = 1 OR DRG = 1 OR SMN = 1';}
		else if ( preg_match('/PLD/', $row2['sdesc']) && preg_match('/BRD/', $row2['sdesc']) && preg_match('/DRG/', $row2['sdesc']) ){$requete = 'WHERE PLD = 1 OR BRD = 1 OR DRG = 1';}
		else if ( preg_match('/PLD/', $row2['sdesc']) && preg_match('/BRD/', $row2['sdesc']) && preg_match('/BLM/', $row2['sdesc']) ){$requete = 'WHERE PLD = 1 OR BRD = 1 OR BLM = 1';}
		else if ( preg_match('/PLD/', $row2['sdesc']) && preg_match('/BRD/', $row2['sdesc']) && preg_match('/WHM/', $row2['sdesc']) ){$requete = 'WHERE PLD = 1 OR BRD = 1 OR WHM = 1';}
		else if ( preg_match('/PLD/', $row2['sdesc']) && preg_match('/BRD/', $row2['sdesc']) && preg_match('/SMN/', $row2['sdesc']) ){$requete = 'WHERE PLD = 1 OR BRD = 1 OR SMN = 1';}
		else if ( preg_match('/PLD/', $row2['sdesc']) && preg_match('/WAR/', $row2['sdesc']) && preg_match('/BRD/', $row2['sdesc']) ){$requete = 'WHERE PLD = 1 OR WAR = 1 OR BRD = 1';}
		else if ( preg_match('/PLD/', $row2['sdesc']) && preg_match('/WAR/', $row2['sdesc']) && preg_match('/DRG/', $row2['sdesc']) ){$requete = 'WHERE PLD = 1 OR WAR = 1 OR DRG = 1';}
		else if ( preg_match('/PLD/', $row2['sdesc']) && preg_match('/WAR/', $row2['sdesc']) && preg_match('/BLM/', $row2['sdesc']) ){$requete = 'WHERE PLD = 1 OR WAR = 1 OR BLM = 1';}
		else if ( preg_match('/PLD/', $row2['sdesc']) && preg_match('/WAR/', $row2['sdesc']) && preg_match('/WHM/', $row2['sdesc']) ){$requete = 'WHERE PLD = 1 OR WAR = 1 OR WHM = 1';}
		else if ( preg_match('/PLD/', $row2['sdesc']) && preg_match('/WAR/', $row2['sdesc']) && preg_match('/SMN/', $row2['sdesc']) ){$requete = 'WHERE PLD = 1 OR WAR = 1 OR SMN = 1';}
		else if ( preg_match('/MNK/', $row2['sdesc']) && preg_match('/WHM/', $row2['sdesc']) && preg_match('/SMN/', $row2['sdesc']) ){$requete = 'WHERE MNK = 1 OR WHM = 1 OR SMN = 1';}
		else if ( preg_match('/MNK/', $row2['sdesc']) && preg_match('/BLM/', $row2['sdesc']) && preg_match('/WHM/', $row2['sdesc']) ){$requete = 'WHERE MNK = 1 OR BLM = 1 OR WHM = 1';}
		else if ( preg_match('/MNK/', $row2['sdesc']) && preg_match('/BLM/', $row2['sdesc']) && preg_match('/SMN/', $row2['sdesc']) ){$requete = 'WHERE MNK = 1 OR BLM = 1 OR SMN = 1';}
		else if ( preg_match('/MNK/', $row2['sdesc']) && preg_match('/DRG/', $row2['sdesc']) && preg_match('/BLM/', $row2['sdesc']) ){$requete = 'WHERE MNK = 1 OR DRG = 1 OR BLM = 1';}
		else if ( preg_match('/MNK/', $row2['sdesc']) && preg_match('/DRG/', $row2['sdesc']) && preg_match('/WHM/', $row2['sdesc']) ){$requete = 'WHERE MNK = 1 OR DRG = 1 OR WHM = 1';}
		else if ( preg_match('/MNK/', $row2['sdesc']) && preg_match('/DRG/', $row2['sdesc']) && preg_match('/SMN/', $row2['sdesc']) ){$requete = 'WHERE MNK = 1 OR DRG = 1 OR SMN = 1';}
		else if ( preg_match('/MNK/', $row2['sdesc']) && preg_match('/BRD/', $row2['sdesc']) && preg_match('/DRG/', $row2['sdesc']) ){$requete = 'WHERE MNK = 1 OR BRD = 1 OR DRG = 1';}
		else if ( preg_match('/MNK/', $row2['sdesc']) && preg_match('/BRD/', $row2['sdesc']) && preg_match('/BLM/', $row2['sdesc']) ){$requete = 'WHERE MNK = 1 OR BRD = 1 OR BLM = 1';}
		else if ( preg_match('/MNK/', $row2['sdesc']) && preg_match('/BRD/', $row2['sdesc']) && preg_match('/WHM/', $row2['sdesc']) ){$requete = 'WHERE MNK = 1 OR BRD = 1 OR WHM = 1';}
		else if ( preg_match('/MNK/', $row2['sdesc']) && preg_match('/BRD/', $row2['sdesc']) && preg_match('/SMN/', $row2['sdesc']) ){$requete = 'WHERE MNK = 1 OR BRD = 1 OR SMN = 1';}
		else if ( preg_match('/MNK/', $row2['sdesc']) && preg_match('/WAR/', $row2['sdesc']) && preg_match('/BRD/', $row2['sdesc']) ){$requete = 'WHERE MNK = 1 OR WAR = 1 OR BRD = 1';}
		else if ( preg_match('/MNK/', $row2['sdesc']) && preg_match('/WAR/', $row2['sdesc']) && preg_match('/DRG/', $row2['sdesc']) ){$requete = 'WHERE MNK = 1 OR WAR = 1 OR DRG = 1';}
		else if ( preg_match('/MNK/', $row2['sdesc']) && preg_match('/WAR/', $row2['sdesc']) && preg_match('/BLM/', $row2['sdesc']) ){$requete = 'WHERE MNK = 1 OR WAR = 1 OR BLM = 1';}
		else if ( preg_match('/MNK/', $row2['sdesc']) && preg_match('/WAR/', $row2['sdesc']) && preg_match('/WHM/', $row2['sdesc']) ){$requete = 'WHERE MNK = 1 OR WAR = 1 OR WHM = 1';}
		else if ( preg_match('/MNK/', $row2['sdesc']) && preg_match('/WAR/', $row2['sdesc']) && preg_match('/SMN/', $row2['sdesc']) ){$requete = 'WHERE MNK = 1 OR WAR = 1 OR SMN = 1';}
		else if ( preg_match('/MNK/', $row2['sdesc']) && preg_match('/PLD/', $row2['sdesc']) && preg_match('/WAR/', $row2['sdesc']) ){$requete = 'WHERE MNK = 1 OR PLD = 1 OR WAR = 1';}
		else if ( preg_match('/MNK/', $row2['sdesc']) && preg_match('/PLD/', $row2['sdesc']) && preg_match('/BRD/', $row2['sdesc']) ){$requete = 'WHERE MNK = 1 OR PLD = 1 OR BRD = 1';}
		else if ( preg_match('/MNK/', $row2['sdesc']) && preg_match('/PLD/', $row2['sdesc']) && preg_match('/DRG/', $row2['sdesc']) ){$requete = 'WHERE MNK = 1 OR PLD = 1 OR DRG = 1';}
		else if ( preg_match('/MNK/', $row2['sdesc']) && preg_match('/PLD/', $row2['sdesc']) && preg_match('/BLM/', $row2['sdesc']) ){$requete = 'WHERE MNK = 1 OR PLD = 1 OR BLM = 1';}
		else if ( preg_match('/MNK/', $row2['sdesc']) && preg_match('/PLD/', $row2['sdesc']) && preg_match('/WHM/', $row2['sdesc']) ){$requete = 'WHERE MNK = 1 OR PLD = 1 OR WHM = 1';}
		else if ( preg_match('/MNK/', $row2['sdesc']) && preg_match('/PLD/', $row2['sdesc']) && preg_match('/SMN/', $row2['sdesc']) ){$requete = 'WHERE MNK = 1 OR PLD = 1 OR SMN = 1';}
Le problème c'est que ça devient très compliqué et je suis sur que j'ai oublié des possibilités (sachant que je n'en suis qu'a 3 mots possibles... je n'ose pas imaginer la suite, ou l'ajout futur d'un mot :oops: ). Donc voila je voudrais savoir s'il était possible d'avoir un équivalent "automatique" pour gérer toutes les possibilités (sans tenir compte de l'ordre des mots) afin de faire varier ma requête en fonction de la présence de ces mots.


Merci à tous les intervenants :)

Eléphant du PHP | 353 Messages

20 févr. 2013, 10:17

Peut-on avoir une idée de la structure de ta table ?

Eléphanteau du PHP | 10 Messages

20 févr. 2013, 11:13

Bonjour et merci de la réponse


Alors celle qui contient les informations des mots (en virant les champs inutiles) :
table_users (
  user_id mediumint(8) NOT NULL,
  username varchar(25) NOT NULL,
  MNK tinyint(4) NOT NULL default '0',
  PLD tinyint(4) NOT NULL default '0',
  WAR tinyint(4) NOT NULL default '0',
  BRD tinyint(4) NOT NULL default '0',
  DRG tinyint(4) NOT NULL default '0',
  WHM tinyint(4) NOT NULL default '0',
  BLM tinyint(4) NOT NULL default '0',
  SMN tinyint(4) NOT NULL default '0',
) ;
Et voici la table qui contient les la phrases (le champ sdesc)
table objet (
  id int(10) unsigned NOT NULL auto_increment,
  name varchar(32) NOT NULL default '',
  zone varchar(32) NOT NULL default '',
  sdesc varchar(80) NOT NULL default '',
  ldesc text NOT NULL,
);



EDIT : Finalement j'ai appris que dans le contexte, un paquet de combinaison était impossible, si bien que je me retrouve avec très peu de combinaison à gérer et du coup, ce message n'a plus lieu d'être. Désolé du dérangement ^^