1. SQL / Говнокод #4200

    −863

    1. 01
    2. 02
    3. 03
    4. 04
    5. 05
    6. 06
    7. 07
    8. 08
    9. 09
    10. 10
    11. 11
    12. 12
    13. 13
    14. 14
    15. 15
    16. 16
    if (($pol) and ($brand)) {
        $result = mysql_query("SELECT * FROM inetmag WHERE pol = '$pol' AND brand = '$brand'");
    }
    ;
    if ((!$pol) and ($brand)) {
        $result = mysql_query("SELECT * FROM inetmag WHERE brand = '$brand'");
    }
    ;
    if (($pol) and (!$brand)) {
        $result = mysql_query("SELECT * FROM inetmag WHERE pol = '$pol'");
    }
    ;
    if ((!$pol) and (!$brand)) {
        $result = mysql_query("SELECT * FROM inetmag");
    }
    ;

    мой учитель сильно негодовал, и предложил вот это:
    $url = <<< TEXT
    SELECT *
    FROM inetmag
    WHERE
    pol = IF(LENGTH('$pol')<>0,('$pol'),pol)
    AND
    brand = IF(LENGTH ('$brand')<>0,('$brand'),brand)
    TEXT;
    $result = mysql_query($url);

    Запостил: truedizzy, 08 Сентября 2010

    Комментарии (8) RSS

    • ЖЖЖЖ(((

      А если будет не два а три параметра? Вы будете 8 условий писать?

      $expr=array('brand'=>$brand,'pol'=>$pol) ;
      $clause=Array();
      foreach($expr as $filed=>$value)
      if($value) $clause[]="$filed='$value'"; //здесь же можно mysql_real_escape_string
      if($clause) $clause="WHERE ".imlode(" AND ",$clause);
      $result = mysql_query("SELECT * FROM inetmag $clause");
      Ответить
    • лаба?
      Ответить
    • ого, да вы с учителем друг друга стоите.

      Кстати, а в какой-такой специальной школе детей учат программированию на php?

      В качестве домашнего задания предлагаю Вам представить во что превратится код, если у Вас в приложении будет 28 разных запросов, в каждом из которых будет джойница 6 таблиц
      Ответить
    • Имхо, код учителя и данный ГК при постинге следовало поменять местами. Уж лучше копипаста, чем мега-убер-труъ-оптимизация а-ля "серебряная пуля-какой-я-молодец-хуйнул-одним-запросом".
      Ответить

    Добавить комментарий