Naar 3 modellen zoeken kost geen tijd (hooguit honderdsten/duizendsten van een seconde). Zoeken naar 500 modellen kost 10 seconden! ruim. Dit moet natuurlijk beter kunnen.
Zou er iemand naar kunnen kijken en een suggestie (het liefst natuurlijk een oplossing) geven waar het beter/sneller kan.
De zoekresultaten moeten op relevantie gerangschikt worden.
Ondanks dat ik de tijd meet, blijft die aangeven dat het hooguit 1 seconde duurt, maar meestal nog steeds maar een paar tienden.
Op de plaats van ############TRAAG############ gaat het waarschijnlijk "fout".
Een db-dump: db dump en dan pmtest.sql
Zou er iemand naar kunnen kijken en een suggestie (het liefst natuurlijk een oplossing) geven waar het beter/sneller kan.
De zoekresultaten moeten op relevantie gerangschikt worden.
Ondanks dat ik de tijd meet, blijft die aangeven dat het hooguit 1 seconde duurt, maar meestal nog steeds maar een paar tienden.
Op de plaats van ############TRAAG############ gaat het waarschijnlijk "fout".
Een db-dump: db dump en dan pmtest.sql
PHP:
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
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
| $starttime = microtime(); $sql = "SELECT m1.model_id, title AS model_title, year_of_publication AS model_year_of_publication FROM models m1, user_roles ur, consulting_activities ca LEFT JOIN models_consulting_activities m2 ON m1.model_id = m2.model_id LEFT JOIN models_user_roles m3 ON m1.model_id = m3.model_id WHERE m3.user_role_id = ur.user_role_id AND m2.consulting_activity_id = ca.consulting_activity_id AND ur.name IN ('".$user_roles."') AND ca.name IN ('".$cons_acts."') GROUP BY m1.model_id ORDER BY m1.model_id"; $result = $db->query($sql); $endtime = microtime(); $time = "Zoeken: ".(($endtime-$starttime > 0) ? ($endtime-$starttime) : "0.00")."<br />"; $totaal = ($endtime-$starttime); $starttime = microtime(); $models = array(); ############TRAAG############ if ($result->numRows() > 0) { $i = 0; while ($result->fetchInto($row)) { $models[$i]['model_id'] = $row['model_id']; $models[$i]['model_title'] = $row['model_title']; $models[$i]['model_year_of_publication'] = $row['model_year_of_publication']; $models[$i]['ca'] = array(); $casql = "SELECT ca.name AS cons_act FROM consulting_activities ca, models m1 LEFT JOIN models_consulting_activities m2 ON m1.model_id = m2.model_id WHERE m1.model_id = '".$row['model_id']."' AND m2.consulting_activity_id = ca.consulting_activity_id"; $caresult = $db->query($casql); if ($caresult->numRows() > 0) { while ($caresult->fetchInto($carow)) { if (in_array($carow['cons_act'], $caArray)) { $models[$i]['ca'][] = $carow['cons_act']; } } $models[$i]['ur'] = array(); $ursql = "SELECT ur.name AS user_role FROM user_roles ur, models m1 LEFT JOIN models_user_roles m2 ON m1.model_id = m2.model_id WHERE m1.model_id = '".$row['model_id']."' AND m2.user_role_id = ur.user_role_id"; $urresult = $db->query($ursql); if ($urresult->numRows() > 0) { while ($urresult->fetchInto($urrow)) { if (in_array($urrow['user_role'], $urArray)) { $models[$i]['ur'][] = $urrow['user_role']; } } } } ++$i; } } ########EINDE TRAAG########## $endtime = microtime(); $time .= "User roles + cons. activities: ".(($endtime-$starttime > 0) ? ($endtime-$starttime) : "0.00")."<br />"; $totaal += ($endtime-$starttime); $starttime = microtime(); foreach ($models as $key => $model) { if (sizeof($model['ca']) == 0 || sizeof($model['ur']) == 0) { unset($models[$key]); } else { $models[$key]['ca'] = sizeof($model['ca']); $models[$key]['ur'] = sizeof($model['ur']); } if (isset($models[$key])) { $models[$key]['total'] = sizeof($model['ca'])+sizeof($model['ur']); } } $endtime = microtime(); $time .= "Lege records eruit: ".(($endtime-$starttime > 0) ? ($endtime-$starttime) : "0.00")."<br />"; $totaal += ($endtime-$starttime); $starttime = microtime(); $tempmodels = array(); $i = 0; foreach ($models as $key => $value) { $tempmodels[$i] = $value; ++$i; } $models = $tempmodels; $endtime = microtime(); $time .= "Herindexeren: ".(($endtime-$starttime > 0) ? ($endtime-$starttime) : "0.00")."<br />"; $totaal += ($endtime-$starttime); $starttime = microtime(); $modelslen = sizeof($models); for ($i = 0; $i < $modelslen; ++$i) { for ($j = 0; $j < $modelslen; ++$j) { if ($i != $j) { if ($models[$j]['total'] < $models[$i]['total']) { $tempmodel = $models[$i]; $models[$i] = $models[$j]; $models[$j] = $tempmodel; } elseif ($models[$j]['total'] == $models[$i]['total']) { if ($models[$j]['ur'] > $models[$i]['ur']) { $tempmodel = $models[$i]; $models[$i] = $models[$j]; $models[$j] = $tempmodel; } } } } } $endtime = microtime(); $time .= "Sorteren: ".(($endtime-$starttime > 0) ? ($endtime-$starttime) : "0.00")."<br />"; $totaal += ($endtime-$starttime); $time .= "Totaal: ".(($totaal > 0) ? ($totaal) : "0.00"); echo $time; |
[ Voor 11% gewijzigd door nemesis_ op 05-09-2005 17:29 ]
Ook een cookie?