Bsp. zu 2:
Anwendungsgebiet ist eine Standardsuche mit LIKE über mehrere Felder und eine Volltextsuche im binären Modus.
Hier die SQL Anweisung, die durchgeführt werden soll:
(Treffer entweder in den Feldern oder in der pdf_summary, aber auf jeden fall ist client = 16)
Code: Alles auswählen
SELECT papicategories.idpilit_category,
papilendings.idpilit_lending,
papiliteratures.idpilit_literature
FROM pilit_literature AS papiliteratures
LEFT JOIN pilit_category AS papicategories
ON papiliteratures.idpilit_category = papicategories.idpilit_category
LEFT JOIN pilit_lending AS papilendings
ON papiliteratures.idpilit_literature = papilendings.idpilit_literature
WHERE
(
(
MATCH (papiliteratures.pdf_summary)
AGAINST ('test' IN BOOLEAN MODE)
)
OR
(
papiliteratures.title LIKE '%test%'
OR papiliteratures.author LIKE '%test%'
OR papiliteratures.publisher LIKE '%test%'
OR papiliteratures.publisher_house LIKE '%test%'
OR papiliteratures.summary LIKE '%test%'
)
)
AND
(
papiliteratures.idclient = '16'
)
ORDER BY papiliteratures.idclient asc,
papicategories.term asc,
papiliteratures.title asc
Im Objekt in der die DBabfrage definiert wird sieht der _where Teil
wie folgt aus:
Code: Alles auswählen
[_where] => Array
(
[global] => Array
(
[papiliteratures.idclient] => Array
(
[operator] => =
[restriction] => 16
)
)
[groups] => Array
(
[fulltext] => Array
(
[] => Array
(
[operator] => MATCH (papiliteratures.pdf_summary) AGAINST ('test' IN BOOLEAN MODE)
[restriction] =>
)
)
[spec] => Array
(
[papiliteratures.title] => Array
(
[operator] => LIKE
[restriction] => %test%
)
[papiliteratures.author] => Array
(
[operator] => LIKE
[restriction] => %test%
)
[papiliteratures.publisher] => Array
(
[operator] => LIKE
[restriction] => %test%
)
[papiliteratures.publisher_house] => Array
(
[operator] => LIKE
[restriction] => %test%
)
[papiliteratures.summary] => Array
(
[operator] => LIKE
[restriction] => %test%
)
)
)
)
[_whereRestriction] =>
[_innerGroupConditions] => Array
(
[spec] => OR
[fulltext] => AND
)
[_groupConditions] => Array
(
[spec] => Array
(
[fulltext] => OR
)
)
Ohne meine Änderungen wird nun aber folgenes SQL erzeugt:
Code: Alles auswählen
SELECT papicategories.idpilit_category,
papilendings.idpilit_lending,
papiliteratures.idpilit_literature
FROM pilit_literature AS papiliteratures
LEFT JOIN pilit_category AS papicategories
ON papiliteratures.idpilit_category = papicategories.idpilit_category
LEFT JOIN pilit_lending AS papilendings
ON papiliteratures.idpilit_literature = papilendings.idpilit_literature
WHERE
(
MATCH (papiliteratures.pdf_summary) AGAINST ('test' IN BOOLEAN MODE)
)
OR
(
papiliteratures.title LIKE '%test%'
OR papiliteratures.author LIKE '%test%'
OR papiliteratures.publisher LIKE '%test%'
OR papiliteratures.publisher_house LIKE '%test%'
OR papiliteratures.summary LIKE '%test%'
)
AND papiliteratures.idclient = '16'
ORDER BY papiliteratures.idclient asc,
papicategories.term asc,
papiliteratures.title asc
Erzeugt wird das ganze so:
Code: Alles auswählen
$oLiteratures->setWhereGroup('fulltext', '', '', 'MATCH (papiliteratures.pdf_summary) AGAINST (\''.$__string.'\' IN BOOLEAN MODE)');
$oLiteratures->setWhereGroup('spec', 'papiliteratures.title', "%".$spec_search_string."%", 'LIKE');
$oLiteratures->setWhereGroup('spec', 'papiliteratures.author', "%".$spec_search_string."%", 'LIKE');
$oLiteratures->setWhereGroup('spec', 'papiliteratures.publisher', "%".$spec_search_string."%", 'LIKE');
$oLiteratures->setWhereGroup('spec', 'papiliteratures.publisher_house', "%".$spec_search_string."%", 'LIKE');
$oLiteratures->setWhereGroup('spec', 'papiliteratures.summary', "%".$spec_search_string."%", 'LIKE');
$oLiteratures->setWhere('pApiLiteratures.idclient', $client);
$oLiteratures->setInnerGroupCondition('spec', 'OR');
$oLiteratures->setInnerGroupCondition('fulltext', 'AND');
$oLiteratures->setGroupCondition('spec','fulltext', 'OR');
Zu 3.
Wenn ich im obigen code die whereGroup 'fulltext' unter die gruppe 'spec' setze, dann wird in der SQL Anweisung:
Code: Alles auswählen
...
MATCH (papiliteratures.pdf_summary) AGAINST ('test' IN BOOLEAN MODE) '%test%'
...
erzeugt.