source: spip-zone/_plugins_/indexer/trunk/lib/Sphinx/SphinxQL/Query.php @ 82818

Last change on this file since 82818 was 82818, checked in by rastapopoulos@…, 7 years ago

Un tableau des options dans la classe de requête + le critère de la boucle associé.

{option nom, valeur}

{option field_weights, "(title=10, content=5)"}

File size: 2.5 KB
Line 
1<?php
2
3namespace Sphinx\SphinxQL;
4
5/**
6 * Classe pour créer des requêtes de sélection Sphinx
7 */
8class Query{
9        private $select  = array();
10        private $from    = array();
11        private $match   = null;
12        private $where   = array();
13        private $groupby = array();
14        private $orderby = array();
15        private $limit   = '';
16        private $option  = array();
17        private $facet   = array();
18
19        public function __construct() {}
20
21        public function select($select) {
22                $this->select[] = $select;
23                return $this;
24        }
25
26        public function from($from) {
27                $this->from[] = $from;
28                return $this;
29        }
30
31
32        public function where($where) {
33                $this->where[] = $where;
34                return $this;
35        }
36
37        public function match($match) {
38                $this->match = $match;
39                return $this;
40        }
41
42        public function getMatch() {
43                return $this->match;
44        }
45
46        public function orderby($orderby) {
47                $this->orderby[] = $orderby;
48                return $this;
49        }
50
51        public function groupby($groupby) {
52                $this->groupby[] = $groupby;
53                return $this;
54        }
55
56        public function limit($limit) {
57                $this->limit = $limit;
58                return $this;
59        }
60       
61        public function option($option) {
62                $this->option[] = $option;
63                return $this;
64        }
65
66        public function facet($facet) {
67                $this->facet[] = $facet;
68                return $this;
69        }
70
71        function quote($value, $type='') {
72                return
73                        (is_numeric($value)) ? strval($value) :
74                                (!is_array($value) ? ("'" . addslashes($value) . "'") :
75                                        join(",", array_map(array($this, 'quote'), $value))
76                                );
77        }
78
79
80        public function get() {
81                $query = array();
82                $this->removeEmpty();
83                if ($this->select)   $query[] = 'SELECT '   . implode(', ', array_unique($this->select));
84                if ($this->from)     $query[] = 'FROM '     . implode(', ', $this->from);
85
86                // WHERE et MATCH
87                $where = $this->where;
88                if ($this->match) $where[] = 'MATCH('. $this->quote($this->match).')';
89                if ($where)    $query[] = 'WHERE ('   . implode(') AND (', $where) . ')';
90
91                if ($this->groupby)  $query[] = 'GROUP BY ' . implode(', ', $this->groupby);
92                if ($this->orderby)  $query[] = 'ORDER BY ' . implode(', ', $this->orderby);
93                if ($this->limit)    $query[] = 'LIMIT '    . $this->limit;
94                if ($this->option)   $query[] = 'OPTION '   . implode(', ', array_unique($this->option));
95                if ($this->facet)    $query[] = 'FACET '    . implode(' FACET ', $this->facet);
96                return implode(' ', $query);
97        }
98
99
100        private function removeEmpty() {
101                foreach (array('select', 'from', 'where', 'groupby', 'orderby', 'facet') as $key) {
102                        $this->$key = array_filter($this->$key);
103                        #$this->$key = array_filter($this->key, 'strlen'); // leaves 0
104                }
105        }
106
107        public function __tostring() {
108                return $this->get();
109        }
110}
111
112
Note: See TracBrowser for help on using the repository browser.