1. Список говнокодов пользователя vagrand

    Всего: 5

  2. PHP / Говнокод #12743

    +159

    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
    $threadusers = $db->query_read("
      SELECT user.username, user.usergroupid, user.membergroupids,
       session.userid, session.inthread, session.lastactivity, session.badlocation,
       IF(user.displaygroupid = 0, user.usergroupid, user.displaygroupid) AS displaygroupid, infractiongroupid,
       IF(user.options & " . $vbulletin->bf_misc_useroptions['invisible'] . ", 1, 0) AS invisible
      FROM " . TABLE_PREFIX . "session AS session
      LEFT JOIN " . TABLE_PREFIX . "user AS user ON(user.userid = session.userid)
      WHERE  session.lastactivity > $datecut
     ");
    
    ...
    
    while ($loggedin = $db->fetch_array($threadusers))

    Я уже несколько раз писал о гениальности ребят которые пишут форум vBulletin. Продолжу эту традицию.
    Выше приведен огрызок кода, которым ребятки собирают список активных пользователей в текущей теме. Думаю тут все понятно, но все же объясню на примере того форума, где довелось увидеть это чудо. В таблице session около 7к записей, активных записей в среднем 4к. Т.е. на выходе мы имеем запрос, который кладет сервак при 64 гигах оперативы + последовательный перебор 4к записей для того что бы выбрать парочку юзеров, которые активны в этой теме.
    Ну в общем ребятки поставили себе прижизненный памятник, который я спешу предоставить на лицезрение сообщества.

    vagrand, 13 Марта 2013

    Комментарии (5)
  3. SQL / Говнокод #12553

    −172

    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
    $subqueries = array();
                                    foreach ($bit_values AS $key => $bits)
                                    {
                                            $timelimit = (TIMENOW - (60 * 60 * 24 * $vbulletin->options['tagcloud_usagehistory']));
                                            $query =        "
                                                    SELECT tagcontent.tagid, tag.tagtext, COUNT(*) AS searchcount
                                                    FROM " . TABLE_PREFIX . "tagcontent AS tagcontent
                                                    INNER JOIN " . TABLE_PREFIX . "tag AS tag ON (tagcontent.tagid = tag.tagid) " .
                                                    implode("\n", $bits['join']) . "
                                                    WHERE tagcontent.contenttypeid IN (" . implode(",", $bit_ids[$key]) . ") AND
                                                            tagcontent.dateline > $timelimit AND " .
                                                            implode(" AND ", $bits['where']) . "
                                                    GROUP BY tagcontent.tagid, tag.tagtext
                                            ";
                                            $subqueries[] = $query;
                                    }
    
                                    if (count($subqueries))
                                    {
                                            $query = "
                                                    SELECT data.tagid, data.tagtext, SUM(data.searchcount) AS searchcount
                                                    FROM
                                                            (" . implode(" UNION ALL ", $subqueries) . ") AS data
                                                    GROUP BY data.tagid, data.tagtext
                                                    ORDER BY searchcount DESC
                                                    LIMIT " . $vbulletin->options['tagcloud_tags'];
    
                                            $tags_result = $vbulletin->db->query_read_slave($query);
                                            while ($currenttag = $vbulletin->db->fetch_array($tags_result))
                                            {
                                                    $tags["$currenttag[tagtext]"] = $currenttag;
                                                    $totals[$currenttag['tagid']] = $currenttag['searchcount'];
                                            }
                                    }

    Из недр форума vbulletin. Много PHP кода, но сам говнокод именно в собираемом запросе.
    Ну вот кем надо быть что бы в коммерческой системе такое писать?!

    vagrand, 07 Февраля 2013

    Комментарии (19)
  4. SQL / Говнокод #11698

    −173

    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
    (
                                    SELECT SQL_CALC_FOUND_ROWS attach, blog.blogid, blog.dateline, blog.rating
                                    ,blog.blogid AS blogid_order, blog.dateline AS dateline_order, blog.rating AS rating_order
    
                                    FROM vbul_blog AS blog
                                    LEFT JOIN vbul_userlist AS buddy ON (buddy.userid = blog.userid AND buddy.relationid = 218376 AND buddy.type = 'buddy')
    LEFT JOIN vbul_userlist AS ignored ON (ignored.userid = blog.userid AND ignored.relationid = 218376 AND ignored.type = 'ignore')
                                    LEFT JOIN vbul_blog_user AS blog_user ON (blog_user.bloguserid = blog.userid)
    
                                    WHERE ((options_ignore & 1 AND ignored.relationid IS NOT NULL) OR (options_buddy & 1 AND buddy.relationid IS NOT NULL) OR (options_member & 1 AND (options_buddy & 1 OR buddy.relationid IS NULL) AND (options_ignore & 1 OR ignored.relationid IS NULL))) AND (~blog.options & 8
                                                    OR
                                            (options_buddy & 1 AND buddy.relationid IS NOT NULL))
                                     AND state IN('visible') AND blog.pending = 0 AND blog.dateline <= 1346700322
    
                            ) UNION (
                                    SELECT attach, blog.blogid, blog.dateline, rating,
                                            blog.blogid AS blogid_order, blog.dateline AS dateline_order, blog.rating AS rating_order
    
                                    FROM vbul_blog AS blog
    
    
                                    WHERE blog.userid IN (218376)
    
                            )
                            ORDER BY dateline_order DESC
                            LIMIT 0, 5;

    Сей чудесный запрос притаился где-то в недрах форума vbulletin

    vagrand, 03 Сентября 2012

    Комментарии (8)
  5. PHP / Говнокод #10311

    +61

    1. 001
    2. 002
    3. 003
    4. 004
    5. 005
    6. 006
    7. 007
    8. 008
    9. 009
    10. 010
    11. 011
    12. 012
    13. 013
    14. 014
    15. 015
    16. 016
    17. 017
    18. 018
    19. 019
    20. 020
    21. 021
    22. 022
    23. 023
    24. 024
    25. 025
    26. 026
    27. 027
    28. 028
    29. 029
    30. 030
    31. 031
    32. 032
    33. 033
    34. 034
    35. 035
    36. 036
    37. 037
    38. 038
    39. 039
    40. 040
    41. 041
    42. 042
    43. 043
    44. 044
    45. 045
    46. 046
    47. 047
    48. 048
    49. 049
    50. 050
    51. 051
    52. 052
    53. 053
    54. 054
    55. 055
    56. 056
    57. 057
    58. 058
    59. 059
    60. 060
    61. 061
    62. 062
    63. 063
    64. 064
    65. 065
    66. 066
    67. 067
    68. 068
    69. 069
    70. 070
    71. 071
    72. 072
    73. 073
    74. 074
    75. 075
    76. 076
    77. 077
    78. 078
    79. 079
    80. 080
    81. 081
    82. 082
    83. 083
    84. 084
    85. 085
    86. 086
    87. 087
    88. 088
    89. 089
    90. 090
    91. 091
    92. 092
    93. 093
    94. 094
    95. 095
    96. 096
    97. 097
    98. 098
    99. 099
    100. 100
    foreach($combinations as $combination){
      $buffer = array();
      if(count($combination)){
    	if(is_numeric($combination[0])){
    		$a_cnt = count($words[$combination[0]]);
    		for($a=0;$a<$a_cnt;$a++){
    			if(is_numeric($combination[1])){
    			$b_cnt = count($words[$combination[1]]);
    			for($b=0;$b<$b_cnt;$b++){
    				if(is_numeric($combination[2])){
    				$c_cnt = count($words[$combination[2]]);
    				for($c=0;$c<$c_cnt;$c++){
    					if(is_numeric($combination[3])){
    					$d_cnt = count($words[$combination[3]]);
    					for($d=0;$d<$d_cnt;$d++){
    						if(is_numeric($combination[4])){
    						$e_cnt = count($words[$combination[4]]);
    						for($e=0;$e<$e_cnt;$e++){
    							if(is_numeric($combination[5])){
    							$f_cnt = count($words[$combination[5]]);
    							for($f=0;$f<$f_cnt;$f++){
    								if(is_numeric($combination[6])){
    								$g_cnt = count($words[$combination[6]]);
    								for($g=0;$g<$g_cnt;$g++){
    									if(is_numeric($combination[7])){
    									$h_cnt = count($words[$combination[7]]);
    									for($h=0;$h<$h_cnt;$h++){
    										if(is_numeric($combination[8])){
    										$i_cnt = count($words[$combination[8]]);
    										for($i=0;$i<$i_cnt;$i++){
    											if(is_numeric($combination[9])){
    											$j_cnt = count($words[$combination[9]]);
    											for($j=0;$j<$j_cnt;$j++){
    												$buffer[] = $words[$combination[0]][$a]
    														.' '.$words[$combination[1]][$b]
    														.' '.$words[$combination[2]][$c]
    														.' '.$words[$combination[3]][$d]
    														.' '.$words[$combination[4]][$e]
    														.' '.$words[$combination[5]][$f]
    														.' '.$words[$combination[6]][$g]
    														.' '.$words[$combination[7]][$h]
    														.' '.$words[$combination[8]][$i]
    														.' '.$words[$combination[9]][$j];
    											}}
    											else{
    												$buffer[] = $words[$combination[0]][$a]
    														.' '.$words[$combination[1]][$b]
    														.' '.$words[$combination[2]][$c]
    														.' '.$words[$combination[3]][$d]
    														.' '.$words[$combination[4]][$e]
    														.' '.$words[$combination[5]][$f]
    														.' '.$words[$combination[6]][$g]
    														.' '.$words[$combination[7]][$h]
    														.' '.$words[$combination[8]][$i];
    											}
    										}}
    										else{
    											$buffer[] = $words[$combination[0]][$a]
    													.' '.$words[$combination[1]][$b]
    													.' '.$words[$combination[2]][$c]
    													.' '.$words[$combination[3]][$d]
    													.' '.$words[$combination[4]][$e]
    													.' '.$words[$combination[5]][$f]
    													.' '.$words[$combination[6]][$g]
    													.' '.$words[$combination[7]][$h];
    										}
    									}}
    									else{
    										$buffer[] = $words[$combination[0]][$a]
    												.' '.$words[$combination[1]][$b]
    												.' '.$words[$combination[2]][$c]
    												.' '.$words[$combination[3]][$d]
    												.' '.$words[$combination[4]][$e]
    												.' '.$words[$combination[5]][$f]
    												.' '.$words[$combination[6]][$g];
    									}
    								}}
    								else{
    									$buffer[] = $words[$combination[0]][$a]
    											.' '.$words[$combination[1]][$b]
    											.' '.$words[$combination[2]][$c]
    											.' '.$words[$combination[3]][$d]
    											.' '.$words[$combination[4]][$e]
    											.' '.$words[$combination[5]][$f];
    								}
    							}}
    							else{
    								$buffer[] = $words[$combination[0]][$a]
    										.' '.$words[$combination[1]][$b]
    										.' '.$words[$combination[2]][$c]
    										.' '.$words[$combination[3]][$d]
    										.' '.$words[$combination[4]][$e];
    							}
    						}}
    						else{
    							$buffer[] = $words[$combination[0]][$a]
    									.' '.$words[$combination[1]][$b]
    									.' '.$words[$combination[2]][$c]
    									.' '.$words[$combination[3]][$d];
    						}

    Вот такой вот кусок кода, к стати весь не поместился, я нашел в самописном движке, на котором моему знакомому сделали корпоративный сайт на 30 страниц. Бюджет был больше 2к зелени.

    vagrand, 17 Мая 2012

    Комментарии (3)
  6. PHP / Говнокод #10061

    +100

    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
    $sql = "SELECT (SELECT Name FROM dbo.RoutesTypes WHERE RowID = Type) AS Name --Название маршрута
          ,(SELECT Name FROM dbo.Destinations WHERE Name = '$Src') AS DestA --Пункт отправления
          ,(SELECT Name FROM dbo.Destinations WHERE Name = '$Dst') AS DestB --Пункт назначения
          --,(SELECT COUNT([RowID]) FROM [RoutePartInstances] WHERE [RoutePartType] = RoutesTypes.RowID AND [Occuped] = 0) AS FreePlaces --Количество свободных мест на выбранную часть маршрута
          ,(SELECT SUM(Cost) From RoutesParts WHERE Ordern >= RoutesTypes.OrderA AND Ordern <= RoutesTypes.OrderB AND InstanceID = Type) AS TicketCost --Стоимость билета на выбранную часть маршрута
          ,(SELECT SUM(TimeInWay) From RoutesParts WHERE Ordern >= RoutesTypes.OrderA AND Ordern <= RoutesTypes.OrderB AND InstanceID = Type) AS TimeInWay --Время в пути на выбранной части маршрута
    		--Расчёт времени отправления
          ,(SELECT DATEADD(Minute, 
                (SELECT 
    				CASE
    					WHEN RoutesTypes.OrderA > 1 THEN (SELECT SUM(TimeInWay) From RoutesParts WHERE Ordern < RoutesTypes.OrderA AND InstanceID = Type)+10*(SELECT COUNT(RowID) From RoutesParts WHERE Ordern < RoutesTypes.OrderA AND InstanceID = Type)
    					ELSE 0
    				END),[DateStart])) AS DepartureTime
    		--Расчёт времени прибытия
          ,(SELECT DATEADD(Minute,
    		   (SELECT SUM(TimeInWay) From RoutesParts WHERE Ordern >= RoutesTypes.OrderA AND Ordern <= RoutesTypes.OrderB AND InstanceID = Type)+10*(SELECT COUNT(RowID) From RoutesParts WHERE Ordern > RoutesTypes.OrderA AND Ordern <= RoutesTypes.OrderB AND InstanceID = Type), 
    			   (SELECT DATEADD(Minute, 
    				   (SELECT 
    						CASE
    							WHEN RoutesTypes.OrderA > 1 THEN (SELECT SUM(TimeInWay) From RoutesParts WHERE Ordern < RoutesTypes.OrderA AND InstanceID = Type)+10*(SELECT COUNT(RowID) From RoutesParts WHERE Ordern < RoutesTypes.OrderA  AND InstanceID = Type)
    					ELSE 0
    				END),[DateStart])))) AS ArrivalTime
    	
    	--,RoutesTypes.OrderA --Порядок выбранной точки отправления в маршруте. Это нам понадобится при покупке билета
        --,RoutesTypes.OrderB --Порядок выбранной точки назначания в маршруте. Это нам понадобится при покупке билета
        --,RoutesTable.[RowID] AS RouteID --Идентификатор рейса из таблицы расписаний. Это нам понадобится при покупке билета
        --,RoutesTable.[Type] AS RouteTypeID --Идентификатор типа маршрута из таблицы типов маршрутов. Это нам понадобится при покупке билета
    
      FROM [RoutesTable] AS RoutesTable
      INNER JOIN	(SELECT RoutesParts_A.[InstanceID],RoutesParts_A.[TimeA],RoutesParts_B.TimeB,RoutesParts_A.RowID,RoutesParts_  A.Ordern AS OrderA,RoutesParts_B.Ordern AS OrderB
    				FROM [RoutesParts] AS RoutesParts_A
    				INNER JOIN (SELECT [InstanceID],[TimeB],[Ordern] FROM [RoutesParts] WHERE [DestBID] = (SELECT RowID FROM Destinations WHERE Name = '$Dst')) AS RoutesParts_B ON RoutesParts_B.InstanceID = RoutesParts_A.InstanceID
    				WHERE [DestAID] = (SELECT RowID FROM Destinations WHERE Name = '$Src'))AS RoutesTypes ON RoutesTable.Type = RoutesTypes.InstanceID";

    Встретил на форуме phpforum.ru. Человек интересовался почему не работает запрос :)

    vagrand, 27 Апреля 2012

    Комментарии (15)