Фильтр для информационной системы. Очень прошу совета.
Здравствуйте, написал небольшой фильтр для информационной системы. Фильтрация идет по трем дополнительным свойствам. Сделал всё по примеру предыдущих обсуждений и фильтр работает прекрасно, если вводятся все поля для фильтрации... но задача также стоит в том, чтобы ограничить выдачу через данный фильтр и при введении не всех полей - например поле первого фильтра введено толко "от", а "до" не указано... а также ограничить выдачу при введении значений например только по превому допсвойству, а остальные не вводить... в приведенных примерах фильтрация "от - до" слита в одну проверку, может кто-то делал что-то подобное и разделял работу фильтров по отдельности.
Код фильтра:
Код фильтра:
if (to_int($_GET['plot']) != '' or to_int($_GET['pldo']) != '' or to_int($_GET['stot']) != '' or to_int($_GET['stdo']) != '' or to_int($_GET['etnum']) != '')
{
$count_conditions = 0;
if (to_int($_GET['plot']) != '' and to_int($_GET['pldo']) != '')
{
$plotval = to_int($_GET['plot']);
$pldoval = to_int($_GET['pldo']);
$external_propertys['plotv'] = $plotval;
$external_propertys['pldov'] = $pldoval;
$element['type'] = 0;
$element['name'] = 'information_items_table.information_systems_id';
$element['prefix'] = ' AND (';
$element['if'] = '=';
$element['value'] = '29';
$element['sufix'] = "AND (information_propertys_items_table.information_propertys_id=79
AND CONVERT(information_propertys_items_table.information_propertys_items_value, UNSIGNED) >= $plotval
AND information_propertys_items_table.information_propertys_id=79
AND CONVERT(information_propertys_items_table.information_propertys_items_value, UNSIGNED) <= $pldoval
)";
$property['select'][] = $element;
$count_conditions++;
}
if (to_int($_GET['stot']) != '' and to_int($_GET['stdo']) != '')
{
$stotval = to_int($_GET['stot']);
$stdoval = to_int($_GET['stdo']);
$external_propertys['stotv'] = $stotval;
$external_propertys['stdov'] = $stdoval;
$element['type'] = 0;
$element['name'] = 'information_items_table.information_systems_id';
$element['prefix'] = ' OR ';
$element['if'] = '=';
$element['value'] = '29';
$element['sufix'] = "
AND (information_propertys_items_table.information_propertys_id=97
AND CONVERT(information_propertys_items_table.information_propertys_items_value, UNSIGNED) >= $stotval
AND information_propertys_items_table.information_propertys_id=97
AND CONVERT(information_propertys_items_table.information_propertys_items_value, UNSIGNED) <= $stdoval
)";
$property['select'][] = $element;
$count_conditions++;
}
if (to_int($_GET['etnum']) != '')
{
$count_conditions++;
$external_propertys['etnumv'] = to_int($_GET['etnum']);
$element['type'] = 1;
$element['property_id'] = 80;
$element['prefix'] = ' OR ';
$element['if'] = '=';
$element['value'] = to_int($_GET['etnum']);
$element['sufix'] = "
) GROUP BY information_items_table.information_items_id HAVING COUNT(information_propertys_items_table.information_propertys_items_id)= $count_conditions
";
$property['select'][] = $element;
}
}
{
$count_conditions = 0;
if (to_int($_GET['plot']) != '' and to_int($_GET['pldo']) != '')
{
$plotval = to_int($_GET['plot']);
$pldoval = to_int($_GET['pldo']);
$external_propertys['plotv'] = $plotval;
$external_propertys['pldov'] = $pldoval;
$element['type'] = 0;
$element['name'] = 'information_items_table.information_systems_id';
$element['prefix'] = ' AND (';
$element['if'] = '=';
$element['value'] = '29';
$element['sufix'] = "AND (information_propertys_items_table.information_propertys_id=79
AND CONVERT(information_propertys_items_table.information_propertys_items_value, UNSIGNED) >= $plotval
AND information_propertys_items_table.information_propertys_id=79
AND CONVERT(information_propertys_items_table.information_propertys_items_value, UNSIGNED) <= $pldoval
)";
$property['select'][] = $element;
$count_conditions++;
}
if (to_int($_GET['stot']) != '' and to_int($_GET['stdo']) != '')
{
$stotval = to_int($_GET['stot']);
$stdoval = to_int($_GET['stdo']);
$external_propertys['stotv'] = $stotval;
$external_propertys['stdov'] = $stdoval;
$element['type'] = 0;
$element['name'] = 'information_items_table.information_systems_id';
$element['prefix'] = ' OR ';
$element['if'] = '=';
$element['value'] = '29';
$element['sufix'] = "
AND (information_propertys_items_table.information_propertys_id=97
AND CONVERT(information_propertys_items_table.information_propertys_items_value, UNSIGNED) >= $stotval
AND information_propertys_items_table.information_propertys_id=97
AND CONVERT(information_propertys_items_table.information_propertys_items_value, UNSIGNED) <= $stdoval
)";
$property['select'][] = $element;
$count_conditions++;
}
if (to_int($_GET['etnum']) != '')
{
$count_conditions++;
$external_propertys['etnumv'] = to_int($_GET['etnum']);
$element['type'] = 1;
$element['property_id'] = 80;
$element['prefix'] = ' OR ';
$element['if'] = '=';
$element['value'] = to_int($_GET['etnum']);
$element['sufix'] = "
) GROUP BY information_items_table.information_items_id HAVING COUNT(information_propertys_items_table.information_propertys_items_id)= $count_conditions
";
$property['select'][] = $element;
}
}
Сделал! всё тупо в лоб, но т.к. время очень сильно поджимает оптимизацию кода можно опустить...
Рабочий код ниже, может кому будет полезен:
Рабочий код ниже, может кому будет полезен:
if (to_int($_GET['plot']) != '' or to_int($_GET['pldo']) != '' or to_int($_GET['stot']) != '' or to_int($_GET['stdo']) != '' or to_int($_GET['etnum']) != '')
{
if (to_int($_GET['plot']) != '')
{
$plotval = to_int($_GET['plot']);
$external_propertys['plotv'] = $plotval;
}
else {
$plotval = '1';
$external_propertys['plotv'] = '';
}
if (to_int($_GET['pldo']) != '')
{
$pldoval = to_int($_GET['pldo']);
$external_propertys['pldov'] = $pldoval;
}
else {
$pldoval = '999';
$external_propertys['pldov'] = '';
}
if (to_int($_GET['stot']) != '')
{
$stotval = to_int($_GET['stot']);
$external_propertys['stotv'] = $stotval;
}
else {
$stotval = '1';
$external_propertys['stotv'] = '';
}
if (to_int($_GET['stdo']) != '')
{
$stdoval = to_int($_GET['stdo']);
$external_propertys['stdov'] = $stdoval;
}
else {
$stdoval = '99999999';
$external_propertys['stdov'] = '';
}
$element['type'] = 0;
$element['name'] = 'information_items_table.information_systems_id';
$element['prefix'] = ' AND (';
$element['if'] = '=';
$element['value'] = '29';
$element['sufix'] = "AND (information_propertys_items_table.information_propertys_id=79
AND CONVERT(information_propertys_items_table.information_propertys_items_value, UNSIGNED) >= $plotval
AND information_propertys_items_table.information_propertys_id=79
AND CONVERT(information_propertys_items_table.information_propertys_items_value, UNSIGNED) <= $pldoval
)";
$property['select'][] = $element;
$element['type'] = 0;
$element['name'] = 'information_items_table.information_systems_id';
$element['prefix'] = ' OR ';
$element['if'] = '=';
$element['value'] = '29';
$element['sufix'] = "
AND (information_propertys_items_table.information_propertys_id=97
AND CONVERT(information_propertys_items_table.information_propertys_items_value, UNSIGNED) >= $stotval
AND information_propertys_items_table.information_propertys_id=97
AND CONVERT(information_propertys_items_table.information_propertys_items_value, UNSIGNED) <= $stdoval
)";
$property['select'][] = $element;
if (to_int($_GET['etnum']) != '')
{
$etnumval = to_int($_GET['etnum']);
$external_propertys['etnumv'] = $etnumval;
$element['type'] = 1;
$element['property_id'] = 80;
$element['prefix'] = ' OR ';
$element['if'] = '=';
$element['value'] = to_int($_GET['etnum']);
$element['sufix'] = "
) GROUP BY information_items_table.information_items_id HAVING COUNT(information_propertys_items_table.information_propertys_items_id)= 3
";
$property['select'][] = $element;
}
else {
$etnumval = '1';
$external_propertys['etnumv'] = '';
$element['type'] = 1;
$element['property_id'] = 80;
$element['prefix'] = ' OR ';
$element['if'] = '>=';
$element['value'] = $etnumval;
$element['sufix'] = "
) GROUP BY information_items_table.information_items_id HAVING COUNT(information_propertys_items_table.information_propertys_items_id)= 3
";
$property['select'][] = $element;
}
}
{
if (to_int($_GET['plot']) != '')
{
$plotval = to_int($_GET['plot']);
$external_propertys['plotv'] = $plotval;
}
else {
$plotval = '1';
$external_propertys['plotv'] = '';
}
if (to_int($_GET['pldo']) != '')
{
$pldoval = to_int($_GET['pldo']);
$external_propertys['pldov'] = $pldoval;
}
else {
$pldoval = '999';
$external_propertys['pldov'] = '';
}
if (to_int($_GET['stot']) != '')
{
$stotval = to_int($_GET['stot']);
$external_propertys['stotv'] = $stotval;
}
else {
$stotval = '1';
$external_propertys['stotv'] = '';
}
if (to_int($_GET['stdo']) != '')
{
$stdoval = to_int($_GET['stdo']);
$external_propertys['stdov'] = $stdoval;
}
else {
$stdoval = '99999999';
$external_propertys['stdov'] = '';
}
$element['type'] = 0;
$element['name'] = 'information_items_table.information_systems_id';
$element['prefix'] = ' AND (';
$element['if'] = '=';
$element['value'] = '29';
$element['sufix'] = "AND (information_propertys_items_table.information_propertys_id=79
AND CONVERT(information_propertys_items_table.information_propertys_items_value, UNSIGNED) >= $plotval
AND information_propertys_items_table.information_propertys_id=79
AND CONVERT(information_propertys_items_table.information_propertys_items_value, UNSIGNED) <= $pldoval
)";
$property['select'][] = $element;
$element['type'] = 0;
$element['name'] = 'information_items_table.information_systems_id';
$element['prefix'] = ' OR ';
$element['if'] = '=';
$element['value'] = '29';
$element['sufix'] = "
AND (information_propertys_items_table.information_propertys_id=97
AND CONVERT(information_propertys_items_table.information_propertys_items_value, UNSIGNED) >= $stotval
AND information_propertys_items_table.information_propertys_id=97
AND CONVERT(information_propertys_items_table.information_propertys_items_value, UNSIGNED) <= $stdoval
)";
$property['select'][] = $element;
if (to_int($_GET['etnum']) != '')
{
$etnumval = to_int($_GET['etnum']);
$external_propertys['etnumv'] = $etnumval;
$element['type'] = 1;
$element['property_id'] = 80;
$element['prefix'] = ' OR ';
$element['if'] = '=';
$element['value'] = to_int($_GET['etnum']);
$element['sufix'] = "
) GROUP BY information_items_table.information_items_id HAVING COUNT(information_propertys_items_table.information_propertys_items_id)= 3
";
$property['select'][] = $element;
}
else {
$etnumval = '1';
$external_propertys['etnumv'] = '';
$element['type'] = 1;
$element['property_id'] = 80;
$element['prefix'] = ' OR ';
$element['if'] = '>=';
$element['value'] = $etnumval;
$element['sufix'] = "
) GROUP BY information_items_table.information_items_id HAVING COUNT(information_propertys_items_table.information_propertys_items_id)= 3
";
$property['select'][] = $element;
}
}
Авторизация