Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > PHP: Базы Данных > сортировка по названию


Автор: tiras 20.10.2011, 15:54
Добрый день!
Подскажите пож-та возможно ли сделать сортировку в базе по названию
есть база:  
http://tilibom-spb.ru/1.gif
т.е на выходе д.б если я хочу выбрать Bratz, то показывает только эти записи в начале, а затем остальные 
что я не так делаю, сортировка не происходит(есть конечно записи и на английском языке и на русском, если просто по полю Proizvoditel сортировать, то сортировка происходит )



Код

$sort="pos";
                            if($_POST["sort"]=="1")$sort="price desc";
                            elseif($_POST["sort"]=="2")$sort="price asc";
                            elseif($_POST["sort"]=="3")$sort="vozrast asc";
                            elseif($_POST["sort"]=="4")$sort="proizvoditel asc";
                            elseif($_POST["sort"]=="<?=$data[$i]['proizvoditel']?>")$sort="proizvoditel asc";





Код

function get_catalog_data($razdel,$where,$sort){
    $arr = array();
    $result = mysql_query("select * from catalog where razdel='".$razdel."'  and ".$where." order by binary ".$sort);
    while($tmp = mysql_fetch_array($result)){
    $tmp["link"]="/pages/".$tmp["razdel"]."/".parseCatalogName($tmp["name"])."_id".$tmp["id"]."/";
      $arr[] = $tmp;
    }
    return $arr;
 }





Код

По производителю:
<form action="" method="post">

         <select name="sort">
         <?for($i=0;$i<count($data[$i]);$i++){?>
<option value="<?=$data[$i]["proizvoditel"]?>" <?if($_POST["sort"]=='<?=$data[$i]["proizvoditel"]?>')echo"selected";?> ><?=$data[$i]["proizvoditel"]?><br>

<?}?> 




Автор: ElGuapo 21.10.2011, 02:05
Правильно ли я понял, что при выборе производителя нужно выдать сначала записи по этому производителю, а потом уже все остальные записи, удовлетворяющие условию? 

Тогда ORDER должен быть таким: 

Код

ORDER BY proizvoditel='Bratz' DESC, proizvoditel ASC

Автор: tiras 27.10.2011, 11:12
Цитата(ElGuapo @ 21.10.2011,  02:05)
Правильно ли я понял, что при выборе производителя нужно выдать сначала записи по этому производителю, а потом уже все остальные записи, удовлетворяющие условию? 

Тогда ORDER должен быть таким: 

Код

ORDER BY proizvoditel='Bratz' DESC, proizvoditel ASC

да правильно, так конечно сортировка проходит, если указать конкретную запись в коде, но если указываю

Код

$result = mysql_query("select * from catalog where razdel='".$razdel."'  and ".$where." order by proizvoditel='".$proizvoditel."'  ".$sort);



к сожалению сортировка не происходит

Автор: bars80080 27.10.2011, 13:39
Цитата(tiras @  27.10.2011,  11:12 Найти цитируемый пост)
$result = mysql_query("select * from catalog where razdel='".$razdel."'  and ".$where." order by proizvoditel='".$proizvoditel."'  ".$sort);

а что это? мы же без понятия, что у вас скрыто в $razdel, $where, $proizvoditel и особенно в $sort

приведите реальный запрос, который идёт в mysql


Автор: tiras 27.10.2011, 21:24
форма :

Код

<form action="" method="post">
<table>
<tr>
    <td valign="top">
     <select name="sort">
     
    
    <?for($i=0;$i<count($data[$i]);$i++){?>
<option value="<?=$data[$i]["proizvoditel"]?>" <?if($_POST["sort"]=="<?=$data[$i]['proizvoditel']?>")echo"selected";?> ><?=$data[$i]["proizvoditel"]?><br>

    
    <?}?> 
    </select>
     &nbsp;&nbsp;
     <input type="submit" name="submit" value="Отфильтровать" />    



Код

$text = get_text_data($current_id);
                            $sort="pos";
                            
                            if($_POST["sort"]=="1")$sort="proizvoditel asc";
                            $where="razdel='".$current_id."' ";
                           
                            $data = get_catalog_data($current_id,$where,$sort);
                            ob_start();
                            require "catalog.php";



и сама обработка

Код

function get_catalog_data($razdel,$where,$sort){
    $arr = array();
    
   $result = mysql_query("select * from catalog where razdel='".$razdel."'  and ".$where." order by proizvoditel='".$proizvoditel."' DESC, ".$sort);
    
$tmp = mysql_fetch_array($result);
    
    while($tmp = mysql_fetch_array($result)){
    $tmp["link"]="/pages/".$tmp["razdel"]."/".parseCatalogName($tmp["name"])."_id".$tmp["id"]."/";
      $arr[] = $tmp;
    }
    return $arr;
 }

Автор: bars80080 27.10.2011, 23:19
да причём здесь обработка. мы понятия не имеем, что у вас сидит в переменных. каков реальный запрос?

вместо
    
   $result = mysql_query("select * from catalog where razdel='".$razdel."'  and ".$where." order by proizvoditel='".$proizvoditel."' DESC, ".$sort);

напишите

    
Код

   $sql = "select * from catalog where razdel='".$razdel."'  and ".$where." order by proizvoditel='".$proizvoditel."' DESC, ".$sort;

var_dump($sql);

$result = mysql_query($sql);



Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)