Bonjour,

Voici mon petit problème de newbie : j'ai une requête qui lors de son traitement sur phpMyAdmin a un temps de chargement trop long. Et je voudrais savoir s'il était possible de simplifier cette requête au niveau du "LIKE '%mot%'".

Je vous met ci-dessous mon code,
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
 
----------------------------------------------------------------------------------------------------------
 
SELECT distinct page.idPage, page.titre, page.ident, page.date_page, page.date_publication, mot.mot, synonyme.synonyme, type.type, theme.theme
FROM page, page_mot, mot, synonyme, type, page_theme, theme
WHERE page.idPage = page_motcle.eid_page
AND page_mot.eid_mot = mot.idMot
AND motcle.idMot = synonyme.eidMot
AND page.eid_type= type.idType
AND page.idPage = page_theme.eid_page
AND page_theme.eid_theme = theme.idTheme
AND (page.titre like '%1980%'
	OR page.ident like '%1980%'
	OR page.date_page like '%1980%'
	OR page.date_publication like '%1980%'
	OR mot.mot like '%1980%'
	OR synonyme.synonyme like '%1980%'
	OR type.type like '%1980%'
	OR theme.theme like '%1980%')
 
----------------------------------------------------------------------------------------------------------

Je l'ai simplifié avec un vrai terme. Sinon à la place de "1980" il y a récupération d'une variable par le biais d'un formulaire ($_POST['variable']) :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
 
/*----------------------------------------------------------------------------------------------------------*/
 
// Code réel
// on récupère et on vérifie le POST avant
if( $tab_size>0 ){		
     $message ="SELECT distinct page.idPage, page.titre, page.ident, page.date_page,
                                           page.date_publication, mot.mot, synonyme.synonyme,type.type,  theme.theme
			FROM page, page_mot, mot, synonyme, type, page_theme, theme
			WHERE page.idPage = page_mot.eid_page
			AND page_mot.eid_mot = mot.idMot
			AND mot.idMot = synonyme.eidMot
			AND page.eid_type= type.idType
			AND page.idPage = page_theme.eid_page
			AND page_theme.eid_theme = theme.idTheme
			AND (page.titre like '%".$tab_words[0]."%'
				OR page.ident like '%".$tab_words[0]."%'
				OR page.date_page like '%".$tab_words[0]."%'
				OR page.date_publication like '%".$tab_words[0]."%'
				OR mot.mot like '%".$tab_words[0]."%'
				OR synonyme.synonyme like '%".$tab_words[0]."%'
				OR type.type like '%".$tab_words[0]."%'
				OR theme.theme like '%".$tab_words[0]."%')";
 
	for($i=1 ;$i<$tab_size ;$i++ ){
		$joint[$i]="AND page.titre like '%".$tab_words[$i]."%'";
		$joint2[$i]="OR page.ident like '%".$tab_words[$i]."%'";
		$joint3[$i]="OR page.date_page like '%".$tab_words[$i]."%'";
		$joint4[$i]="OR page.date_publication like '%".$tab_words[$i]."%'";
		$joint5[$i]="OR mot.mot like '%".$tab_words[$i]."%'";
		$joint6[$i]="OR synonyme.synonyme like '%".$tab_words[$i]."%'";
		$joint7[$i]="OR type.type like '%".$tab_words[$i]."%'";
		$joint8[$i]="OR theme.theme like '%".$tab_words[$i]."%'";
	}
	foreach ($joint as $value){
		$message.=$value;
	}
	foreach ($joint2 as $value2)
	{
		$message.=$value2;
	}
	foreach ($joint3 as $value3)
	{
		$message.=$value3;
	}
	foreach ($joint4 as $value4)
	{
		$message.=$value4;
	}
	foreach ($joint5 as $value5)
	{
		$message.=$value5;
	}
	foreach ($joint6 as $value6)
	{
		$message.=$value6;
	}
	foreach ($joint7 as $value7)
	{
		$message.=$value7;
	}
	foreach ($joint8 as $value8)
	{
		$message.=$value8;
	}
}
 
// send request
$req_word = $connect->query($message);
 
// recovery of results
$row = $req_word->fetchAll(PDO::FETCH_ASSOC);
var_dump($row);
/*----------------------------------------------------------------------------------------------------------*/
Merci pour votre aide