по отдельности они в принципе работают.. но столкнулся с проблемой, запрос получается очень грамоздкий... я в нем путаюсь, и не совсем правильно работает...
Т.е. чтоб вывести текущие поручения, у меня вот такой запрос -
ifтак же и на выполненные, не выполненные и т.д.
($_POST['orders']=="flowing") //текущие поручения-----------------------
{
$Query = mysql_query($tQuery. ' WHERE Result LIKE ""'); //вывод текущих поручений
while ($all_order[] = mysql_fetch_assoc($Query)) {}
}
Проблема дальше... если я хочу вывести выполнненые поручения конкретным клиентом, то запрос уже такой -
if (($_POST['clien']=="avtor") AND ($_POST['orders']=="flowing")) //Текущие поручения по авторам-----------------------
{
$Query = mysql_query($tQuery. ' WHERE Result LIKE "" AND id_avtor LIKE "'.$_POST['client'].'" '); //вывод исполнителей
while ($all_order[] = mysql_fetch_assoc($Query)) {}
}
И так получается надо прописать всевозможные комбинации
Текущие поручения
Текущие поручения с таким то автором
Текущие поручения с таким то исполнителем
Текущие поручения с такой то датой
Текущие поручения с такой то датой и таким то исполнителем
Текущие поручения с такой то датой и таким то автором такого то приоритета...
И т.д.
Это можно как то уменьшить? Потому что нереально уже запутался...
Спустя 20 минут, 41 секунда (24.05.2011 - 15:54) T1grOK написал(а):
Это упрощается довольно легко:
По моему довольно универсально! Добавляй, убирай сколько угодно колонок в массив $_columns, а остальная часть останется неизменной.
//создаем массив полей, которые могут использоваться в запросе, собственно это и есть основной элемент универсальности
$_columns = array('column1'=>NULL,
'column2'=>NULL,
'column3'=>NULL);
$query_filter = '';//кусок запроса с условиями
$query_filter_array = array();
//собственно проверяем отправили ли форму
if ($_POST['submit']){
//смотрим что у нас пришло с поста
foreach($_columns as $key=>$value){
if(isset($_POST[$key])){
$query_filter_array[] = '`'.$_POST[$key]. '` LIKE \''.$_POST[$key].'\'';
}
}
}
//проверяем было ли что-то заполнено
//если да то разбираем массив
if(!empty($query_filter_array)){
$query_filter = " WHERE ".implode(' AND ', $query_filter_array);
}
//дальше собираем весь запрос и выполняем
$Query = mysql_query($tQuery.$query_filter);
По моему довольно универсально! Добавляй, убирай сколько угодно колонок в массив $_columns, а остальная часть останется неизменной.
Спустя 2 часа, 47 минут, 38 секунд (24.05.2011 - 18:41) Lightt написал(а):
Извини, пытался сейчас сделать как то говоришь, но что то запутался о_О
Получилось только вывести все данные, без какой либо сортировки, можно примерчик небольшой?
Что то я не то наверное делаю =) глянь пожалуйста...
rq/otchet.php - содержит -
Сама форма добавления выглядит вот так
Получилось только вывести все данные, без какой либо сортировки, можно примерчик небольшой?
Что то я не то наверное делаю =) глянь пожалуйста...
require_once 'rq/otchet.php'; //подключение запроса
//создаем массив полей, которые могут использоваться в запросе, собственно это и есть основной элемент универсальности
$_columns = array('$_POST["orders"]'=>"all",
'column2'=>NULL,
'column3'=>NULL);
$query_filter = 'Result LIKE "YES"';//кусок запроса с условиями
$query_filter_array = array();
//собственно проверяем отправили ли форму
if ($_POST['vid']){
//смотрим что у нас пришло с поста
foreach($_columns as $key=>$value){
if(isset($_POST[$key])){
$query_filter_array[] = '`'.$_POST[$key]. '` LIKE \''.$_POST[$key].'\'';
}
}
}
//проверяем было ли что-то заполнено
//если да то разбираем массив
if(!empty($query_filter_array)){
$query_filter = " WHERE ".implode(' AND ', $query_filter_array);
}
//дальше собираем весь запрос и выполняем
$Query = mysql_query($tQuery.$query_filter);
while ($all_order[] = mysql_fetch_assoc($Query)) {}
rq/otchet.php - содержит -
<?php
$tQuery = 'select order_user.id,order_user.Percent,order_user.data_in_Result,
orders.data_order,orders.name_orders,
t1.FIO AS order_ispolnitel,
t2.FIO AS order_avtor,
degree_priority.name_Priority AS order_priority
from order_user
left join orders on orders.id = order_user.id_orders
left join degree_priority on degree_priority.id = orders.id_priority
LEFT JOIN client t1 ON t1.id = order_user.id_executors
LEFT JOIN client t2 ON t2.id = orders.id_autor'
?>
Сама форма добавления выглядит вот так
<form method="POST">
<table>
<tr>
<td style="width: 260">
Поручения:
</td>
<td>
<select name="orders" style="width : 155" >
<option value=""> </option>
<option value="flowing">Текущие </option>
<option value="fulfilled">Выполненные </option>
<option value="Notfulfilled">Не выполненные </option>
</select>
</td>
</tr>
<tr>
<td style="width: 260">
сортировка по:
</td>
<td style="width: 50">
<select name="clien" style="width : 155" >
<option value=""></option>
<option value="avtor">Авторам</option>
<option value="ispol">Исполнителям</option>
</select>
</td>
<td>
<select name="client">
<?php foreach($all_client AS $client): ?>
<?php if(isset($client['id'])): ?>
<option value="<?php echo $client['id']; ?>">
<?php echo $client['FIO']; ?>
</option>
<?php endif;?>
<?php endforeach;?>
</select>
</td>
</tr>
<tr>
<td><input type="submit" value="Вывести" name="vid"></td>
</tr>
</table>
Спустя 10 минут, 36 секунд (24.05.2011 - 18:52) ИНСИ написал(а):
T1grOK довольно таки не плохо :) Только вот я бы сделал небольшие корректировки:
Цитата |
if ($_POST['submit']){ |
А что если у кнопки submit стоит значение 0 :) Тогда будет не гуд :) Лучше проверять с помощью:
if(isset($_POST['submit'])) {
Цитата |
$query_filter_array[] = '`'.$_POST[$key]. '` LIKE \''.$_POST[$key].'\''; |
Зачем экранировать? Если можно так:
$query_filter_array[] = " `".$_POST[$key]."` LIKE '".$_POST[$key]."' ";
Цитата |
if(!empty($query_filter_array)){ |
я бы заменил на:
if(sizeof($query_filter_array) > 0)
Спустя 37 минут, 39 секунд (24.05.2011 - 19:30) Lightt написал(а):
А вообще странно, почему то не работает эта часть запроса -
Хотя вот такой вариант, вполне отлично все выводит, в чем причина?
require_once 'rq/otchet.php';
$query_filter = 'WHERE Result LIKE "YES"';//кусок запроса с условиями
//дальше собираем весь запрос и выполняем
$Query = mysql_query($tQuery.$query_filter);
while ($all_order[] = mysql_fetch_assoc($Query)) {}
Хотя вот такой вариант, вполне отлично все выводит, в чем причина?
require_once 'rq/otchet.php';
$Query = mysql_query($tQuery. ' WHERE Result LIKE "YES"'); //вывод выполненных поручений
while ($all_order[] = mysql_fetch_assoc($Query)) {}
Спустя 8 минут, 14 секунд (24.05.2011 - 19:38) Игорь_Vasinsky написал(а):
может вот это раздеить нужно:
вот так
$Query = mysql_query($tQuery.$query_filter);
вот так
$Query = mysql_query($tQuery." ".$query_filter);
Спустя 9 минут, 43 секунды (24.05.2011 - 19:48) Lightt написал(а):
о_О Нет...как ни странно это работает...
Спасибо =) буду разбираться дальше...
$Query = mysql_query($tQuery." ".$query_filter);
Спасибо =) буду разбираться дальше...