1. PHP / Говнокод #1908

    +153.5

    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
    17. 17
    18. 18
    19. 19
    20. 20
    21. 21
    22. 22
    23. 23
    24. 24
    25. 25
    26. 26
    27. 27
    28. 28
    29. 29
    30. 30
    31. 31
    32. 32
    33. 33
    34. 34
    35. 35
    36. 36
    37. 37
    38. 38
    39. 39
    40. 40
    41. 41
    42. 42
    43. 43
    44. 44
    45. 45
    46. 46
    47. 47
    48. 48
    49. 49
    50. 50
    51. 51
    52. 52
    53. 53
    54. 54
    55. 55
    56. 56
    57. 57
    58. 58
    59. 59
    60. 60
    61. 61
    62. 62
    63. 63
    64. 64
    65. 65
    66. 66
    67. 67
    68. 68
    /**
    	* Выполняет запрос SELECT
    	*
    	* @param string  $tables      Список таблиц, разделённый запятыми
    	* @param string  $condition   Условие для выборки (WHERE)
    	* @param string  $order       Поля для сортировки (ORDER BY)
    	* @param string  $fields      Список полей для получения
    	* @param int     $lim_rows    Максимльное количество получаемых записей
    	* @param int     $lim_offset  Начальное смещение для выборки
    	* @param string  $group       Поле для группировки
    	* @param bool    $distinct    Вернуть только уникальные записи
    	*
    	* @return array
    	*/
    	function select($tables, $condition = '', $order = '', $fields = '', $lim_rows = 0, $lim_offset = 0, $group = '', $distinct = false)
    	{
    		if (is_bool($fields) || $fields == '1' || $fields == '0' || !is_numeric($lim_rows)) {
    			# Обратная совместимость c 1.2.x
    			$desc = $fields;
    			$fields = $lim_rows ? $lim_rows : '*';
    			$lim_rows = $lim_offset;
    			$lim_offset = $group;
    			$group = $distinct;
    			$distinct = func_num_args() == 9 ? func_get_arg(8) : false;
    			$query = 'SELECT ';
    			if ($distinct) $query .= 'DISTINCT ';
    			if (!strlen($fields)) $fields = '*';
    			$tables = str_replace('`' ,'', $tables);
    			$tables = preg_replace('/([\w.]+)/i', '`'.$this->prefix.'$1`', $tables);
    			$query .= $fields." FROM ".$tables;
    			if (strlen($condition)) $query .= " WHERE $condition";
    			if (strlen($group)) $query .= " GROUP BY $group";
    			if (strlen($order)) {
    				$query .= " ORDER BY $order";
    				if ($desc) $query .= ' DESC';
    			}
    			if ($lim_rows) {
    				$query .= ' LIMIT ';
    				if ($lim_offset) $query .= "$lim_offset, ";
    				$query .= $lim_rows;
    			}
    		} else {
    			$query = 'SELECT ';
    			if ($distinct) $query .= 'DISTINCT ';
    			if (!strlen($fields)) $fields = '*';
    			$tables = str_replace('`','',$tables);
    			$tables = preg_replace('/([\w.]+)/i', '`'.$this->prefix.'$1`', $tables);
    			$query .= $fields." FROM ".$tables;
    			if (strlen($condition)) $query .= " WHERE ".$condition;
    			if (strlen($group)) $query .= " GROUP BY ".$group."";
    			if (strlen($order)) {
    				$order = explode(',', $order);
    				for($i = 0; $i < count($order); $i++) switch ($order[$i]{0}) {
    					case '+': $order[$i] = substr($order[$i], 1); break;
    					case '-': $order[$i] = substr($order[$i], 1).' DESC'; break;
    				}
    				$query .= " ORDER BY ".implode(', ',$order);
    			}
    			if ($lim_rows) {
    				$query .= ' LIMIT ';
    				if ($lim_offset) $query .= "$lim_offset, ";
    				$query .= $lim_rows;
    			}
    		}
    		$result = $this->query_array($query);
    
    		return $result;
    	}

    Запостил: nbyt, 28 Сентября 2009

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

    • и чо?
      Ответить
      • Ничего. Это тупизна запостившего гавнокод.
        Ответить
    • Не поленитесь объяснить, где вы тут увидели говнокод.
      Ответить
    • гыгыгыг про having забыль ,,,,
      Ответить
      • Видимо это будет в следующей версии.
        Ответить
    • На самом деле, код - жуткое говнище. Просто писать sql намного удобнее, чем пользоваться такой приладой
      Ответить
      • Согласен, но всё же говнокода вот это не достоино.
        Ответить
      • если вдруг mysql станет платным, то автор этого чуда просто слегка подкорректирует поведение функции, в противном случае пришлось бы бегать по всему проектом и судорожно править все plain-sql
        Ответить
    • Такое можно юзать только в самых простых случаях. Чисто так - для себя.
      Ответить
      • Мне как-то довелось пользовать подобное.
        Страшно!
        Именно тем, что выполнение подзапроса, объединение таблиц и прочее превращаются в монстров. Вызов функции становится абсолютно нечитаемым... Так ещё нужно постоянно помнить шесть параметров! Что вот сначала поля, а затем упорядочение и т.д.

        Схема была бы хороша, если бы работал некоторый "собственный" унифицированный язык запросов, чтобы запросы разбирались "на лету", и превращались в запросы конкретной реализации. Так вообще можно абстрагироваться от того, как работаешь с данными: файлы-списки, xml-файлы, запрос к операционной системе или в базу данных.

        А вот такая функция, только путает...
        Ответить
        • На переправе коней не меняют. Если уж выбрана СУБД, то пусть будет она.
          "Универсальный нож рубит дерево как лопата"
          Ответить
    • как пользоваться массивами мы не знаем..
      Ответить

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