Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
PHP 5. На примерах. Авторы: Кузнецов М.В., Симдянов И.В., Голышев С.В. Самоучитель MySQL 5. Авторы: Кузнецов М.В., Симдянов И.В. MySQL на примерах. Авторы: Кузнецов М.В., Симдянов И.В. Программирование. Ступени успешной карьеры. Авторы: Кузнецов М.В., Симдянов И.В. Социальная инженерия и социальные хакеры. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум PHP

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Сортировака.
 
 автор: Jovidon   (25.08.2013 в 12:02)   письмо автору
 
 

Салам народ!

Задача: сортировать данных по категории и количество
Когда меняю значение формы переменная $where всегда принимает занчение answer = ' ' и переменная лимит = 10

Кто небудь обясните как вообще сортировку делат?
Может быть есть другой способ? если да то какой?
<?php
    
// limit;
    
if(!isset($_POST['limit']))            $limit 'LIMIT 0,5';
    elseif(
$_POST['limit'] = 10)        $limit 'LIMIT 0,10';
    elseif(
$_POST['limit'] = 50)        $limit 'LIMIT 0,50';
    elseif(
$_POST['limit'] = 100)        $limit 'LIMIT 0,100';
    elseif(
$_POST['limit'] == 'all')    $limit '';
    
    
// category;
    
if(!isset($_POST['category_ID'])        $where "WHERE answer = ' '";
    elseif(
$_POST['category_ID'] = 1)        $where "WHERE category_ID = " . (int)$_POST['category_ID'];
    elseif(
$_POST['category_ID'] = 2)        $where "WHERE category_ID = " . (int)$_POST['category_ID'];
    elseif(
$_POST['category_ID'] = 3)        $where "WHERE category_ID = " . (int)$_POST['category_ID'];
    
    
    
$q "SELECT ID, title
          FROM faqs "
.
          
$where ."
          ORDER BY ID
          DESC
          " 
$limit;
    
    
$r mysql_query($q) or die(mysql_error());
    if(
mysql_num_rows($r) > 0){
        while(
$row mysql_fetch_array($rMYSQL_ASSOC)){
            
// Вывод;
        
}
    }
?>
<form method="post">
    <p>Лимит:
        <select name="limit" onchange="this.form.submit()">
            <option value="0">Выбрать</option>
            <option value="10">10</option>
            <option value="50">50</option>
            <option value="100">100</option>
            <option value="all">Все</option>
        </select>
    </p>
    <!-- Категорий вообщета выводится из БД, но так для примера -->
    <p>Категорий:
        <select name="category_ID" onchange="this.form.submit()">
            <option value="0">Выбрать</option>
            <option value="1">Категория 1</option>
            <option value="2">Категория 2</option>
            <option value="3">Категория 3</option>
        </select>
    </p>
</form>

  Ответить  
 
 автор: confirm   (25.08.2013 в 12:45)   письмо автору
 
   для: Jovidon   (25.08.2013 в 12:02)
 

Для начала, не вдаваясь в суть вопроса, зачем:
if(!isset($_POST['category_ID']) $where = "WHERE answer = ' '";
elseif($_POST['category_ID'] = 1) $where = "WHERE category_ID = " . (int)$_POST['category_ID'];
elseif($_POST['category_ID'] = 2) $where = "WHERE category_ID = " . (int)$_POST['category_ID'];
elseif($_POST['category_ID'] = 3) $where = "WHERE category_ID = " . (int)$_POST['category_ID'];
?
Ведь ну не может быть id категории равное пустой строке и 0, то есть если она не получена либо не делаем запрос вообще, либо выводим какую либо категорию по умолчанию. Зачем масса условий здесь?

То же самое и в определении LIMIT, зачем эти все перечисление?

  Ответить  
 
 автор: Jovidon   (25.08.2013 в 14:12)   письмо автору
 
   для: confirm   (25.08.2013 в 12:45)
 

если она не получена либо не делаем запрос вообще, либо выводим какую либо категорию по умолчанию.

По умолчанию выводиться переменная $where = "WHERE answer = ' '
Если есть переменнея категорий то переменная $where меняестя на категорий а не на WHERE answer = ' '

  Ответить  
 
 автор: confirm   (25.08.2013 в 14:16)   письмо автору
 
   для: Jovidon   (25.08.2013 в 14:12)
 

Допустим, но это зачем:
elseif($_POST['category_ID'] = 1) $where = "WHERE category_ID = " . (int)$_POST['category_ID'];
elseif($_POST['category_ID'] = 2) $where = "WHERE category_ID = " . (int)$_POST['category_ID'];
elseif($_POST['category_ID'] = 3) $where = "WHERE category_ID = " . (int)$_POST['category_ID'];

  Ответить  
 
 автор: Jovidon   (25.08.2013 в 14:47)   письмо автору
 
   для: confirm   (25.08.2013 в 14:16)
 

аа да точно я понял что вы имели виду
<?php
$where 
= (!isset($_POST['category_ID']) ? "WHERE answer = ' '" "WHERE category_ID = " . (int)$_POST['category_ID']);
?>

  Ответить  
 
 автор: confirm   (25.08.2013 в 14:54)   письмо автору
 
   для: Jovidon   (25.08.2013 в 14:47)
 

Тоже самое и по LIMIT. Если первый аргумент его постоянен, зачем куча условий:
<?
$limit 
= isset($_POST['limit']) ? $_POST['limit'] == 'all' '' 'LIMIT 0,'.(int)$_POST['limit'] : '';


Что касается вопроса о сортировке, то какое отношение она имеет к WHERE и LIMIT?

  Ответить  
 
 автор: psychomc   (25.08.2013 в 15:00)   письмо автору
 
   для: confirm   (25.08.2013 в 14:54)
 

как-то без скобок для внутреннего тернарного совсем не читабельно

  Ответить  
 
 автор: confirm   (25.08.2013 в 15:07)   письмо автору
 
   для: psychomc   (25.08.2013 в 15:00)
 

Да все читаемо, если уж трудно, можно и скобки, а можно и заменить на if...else. Главное, это понять, что перечисление условий бессмысленно, и если это ради конкретного второго аргумента, то какой и в этом смысл, если допускается 'all'.

А вообще, такое написание условных выражений может быть полезным. )

  Ответить  
 
 автор: Jovidon   (25.08.2013 в 15:03)   письмо автору
 
   для: confirm   (25.08.2013 в 14:54)
 

Понял!
Следующи раз буду внимателен в названиях темы. =)

Спасибо!

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования