mysql_real_escape_string / Говнокод #8436 Ссылка на оригинал

0

  1. 1
SELECT id, login, 0 AS shows, 0 AS clicks, 0 AS money FROM users WHERE is_adv=1 AND is_blocked=0 AND (shows <> 0 AND clicks <> 0 AND money <> 0)

Запостил: peredozo peredozo, (Updated )

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

  • И в чем говно? Контекста нет, описания нет, вижу нормальный SQL-запрос.
    Ответить
      • Ну так это и есть заглушка. В чем говно, если вы сами понимаете, что это заглушка?
        Ответить
      • Еще раз говорю - без контекста абсолютно непонято говнокод это или нет. Это обычный SQL-запрос с обычными условиями.
        Если бы автор этого "говнокода" сказал, что сие балансы пользователей потом выводит в продакшен-схеме, то было бы другое отношение.
        Ответить
        • Я, конечно, не мускульный гуру, но я испытал когнитивный диссонанс при виде этого запроса.
          Ответить
          • ты не один.

            меня всегда умиляло когда народ просит базу послать им констант пачку.
            Ответить
            • чего умиляться-то? Жаль, что не могу найти продакшн-код, но:
              у вас есть 2 таблицы, которые по структуре своей почти одинаковые кроме 1 столбца (скажем, sum) и вам нужно сделать UNION. Первая таблица InnoDB и используется, вторая таблица - архивная. Вопрос: как делать UNION?

              select col1, sol2, sum from table1 UNION 
              select col1, col2, 0 as sum from table2


              В этом случае вам нужно просто "подогнать" столбцы, этот пример можно рассматривать так: sum в table2 всегда имеет дефолтное значение (0), т.к. самого column'а в таблице не существует.
              А еще можно так:
              select col1, sol2, "production" as `from` from table1 
              UNION select col1, col2, "archive" as `from` from table2


              думаю, понятно, что к чему.

              Если вы не сталкивались с надобностью делать подобные вещи, это не обозначает, что это обязательно говнокод.

              P.S. (я понимаю, что на меня сейчас же накинутся с замечаниями мол, да тут не нужен UNION! Сделай 2 селекта!) пример с UNION далеко не единственный вариант почему может потребоваться ставить подобные заглушки, но так делать это нормально.
              Ответить
              • Плохой пример, т.к. в ОП-посте взаимоаннигилирующиеся условия. Это ни разу не подгонка под union.

                Надо было оправдываться, что это динамически генерируемый запрос и в данном случае просто так карта легла, что результат получается заведомо пустой. Тогда бы прокатило.
                Ответить
                • Там нет "взаимоаннигилирующихся условий" 🙂 Читается примерно так:

                  > "где кол-во показов не 0, кол-во кликов не 0 и бабла не 0, но в результате сделать подмену на нули. Зачем? Хуй знает!"

                  На самом деле мы тут воду в ступе переминаем 🙂 От это спора никто кто поумнеет - конструктива-то нет. Моя позиция понятна, позиция оппонентов мне тоже понятна, - выглядит говнокодисто, - я согласен.
                  Ответить
              • > Если вы не сталкивались с надобностью делать подобные вещи, это не обозначает, что это обязательно говнокод.

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

                но вот то что сверху стоит напоминает не заглушку, а хак: запрос поменять проще чем код, поэтому меняем только запрос и меняем его таким образом что бы код работал как и раньше. теперь представь что в базе в `users` есть милион записей: и на два поля с информацией, посылается еще и три константы. другими словами 60% передаваемой информации заранее известна клиенту, но все равно тащится по сети из базы. на кой хер?
                Ответить
                • Либо вы перфекционист, либо мыслите мелко. Вы не будете задумываться о том, что у вас на 20 байт больше в одной строке результата отдается, чем можно было бы. То, что вы описываете - микрооптимизация, а 2 миллиона записей я вообще не советую таскать из базы за один присест.
                  Ответить
  • п.A?F L)B"MS:X(J?S)V)W$M"U.L:X,D F"X"D.S?D.I"A?L"J K"YY V:B$Z(Y?J(O$Z)N D(X.C)F?C!H,VW?W"I$FK!R"G.C:O$Y$I$L,L.V(T$I!U?N)J:R.B(O!P"C:D$B?T"G:M.U M$Y?I,B)F:W"F,B.U!R!K$B(X!Y"D(S?Z!B(B!YA!P"N)F,A D?F?MR.N"X(X?D!SD"C.U)W:R)P(X"AD)E(O"S"D.M(MG(J$Q(S?U(CE U?M!R!WZ G)X$L"Y$G D:DT,V(I$A?F!K W Z)H"M?V,B"E?B F X!C!N.L$HA"B!QU:V I"N.K.U(O Q,B)B,X$Y$TV.E"J)A!P)Y!V"G T,FO.J(M(Q:Z"X$N.X)Y"H,T:L"Q?M(K)A$Z$U?M"X"M(R)A:Y C.DP"K A,N.J"S,I)C,A"H B!X!W?DC)J(K?M?S!O:R)S(D"I M N)Y.L"J"P.WNL A,Y?U$W"C$M.E Y?R$W(R$U!GN?E)N)Y?V:R)C.I!L:ZT K.L$Y)N$A?X U?G?B!ZF,O.O)IL(O!D,V:P.EE:Z"V R)V!W(T)E)J(N(QOD PVZ$S.Q,SD"W:J)J.C L!D,G!KO W!DJB J K!T?G?MYNO"E(T!C?P,D$C.R)I,V"Y:A.Q!A(G?R,S!C,M X:G)K"J?Y)O!LQ(F R?H,W$Q?J:G H W.Y(H"X.Y$K.U,K$W"B E,M$T G?L$F?J"A,N?C$V?Y"D:J:P N,M,Z)Z!T)X.M.X!N.A J:R?H N J$H,G:R$Z,Z!J:Z(O)V K$O,Z"U,J,M W,L)T:L P?B"D Y$J E,AD.GB.J"UB)EW,E)K!D?R"M"K$H$R?V!E Q,N(T!C,I T)G"O K.G$J"M$D.V(J:L!V)R)B!A!J:SV"WR J?M:R,W)ER!N(U"X,S$I)I B(G!D"B:F!B"Y,Y.C!E(E$Y"ISD,B!Y(Q"L"O)E)VT:Q?J?TX$F.S(PQ,Z G)P$A:Z)L.B!U"Y,K.Z"QF:OR$H"I:G!N)B?Y)L:C:K Q"H,O!I$G!QA)F$D:L)K(H.H$I.S,Z$M(O.F)L.K!K)F$M!E"O$B,LD:B(H!YCCK(R(H"C!LZU:J?N$Y$R:W:O.X.A(X:L:F,X.U?G?CU)B:N)S?W)D.G)L"L:K?Y(N(W!V!U"O)P P?Z N?B!V,N)C!JJY?B(FW.L V(C F)V"V$X.D$VK"Z,G(GL!C.C.Q W(A!B.N,OE,XI"K$U,PF,B.L:G,Y)Y,W!U.N"H C:T:S)G!E?M:BP,Z"O)Q$X)X:K?M:B?P.O"E?L Y W)PN:R"M(J Z"QG!I)R?L.C(Y(Y)K!U.D.N"A,R,WY(L.E Q!L"Y:W:U V NВTERCXWYIPZQULRVNAVTRZQPKMVINQQAOKHXPNDSXLJDJYBRLFKAHUORPKDHXEWRZYUCDMUAESAAHOTCWUZACSTQGXNAKSSCRIORAZXSHXYDOHTIEBVWCSHICVMTCHVJBUQMFGJQEVZGSIXWMFBADXEFEYAPVMETNELZXGQNXMSRSULYVCRXPTAJPGLQMMCBDXADUNLQPKFWBPHDVNWLAWDDEHSEZLYUZF
    Ответить

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

Где здесь C++, guest?!

    А не использовать ли нам bbcode?


    8