- 1
SELECT users.nick,group.name FROM users,group WHERE user.id='$id' AND group.id=user.group;
Нашли или выдавили из себя код, который нельзя назвать нормальным, на который без улыбки не взглянешь? Не торопитесь его удалять или рефакторить, — запостите его на говнокод.ру, посмеёмся вместе!
−873
SELECT users.nick,group.name FROM users,group WHERE user.id='$id' AND group.id=user.group;
Это мой код. Мне сказали что это говнокод, и порекомендовали спросить здесь.
В чём именно говнокодость, и как надо писать правильно?
This is obvious 13.06.2010 10:19 # +4
avamana 13.06.2010 10:21 # 0
Порекомендовал какой то чел с одного форума wapговнокодеров.
Так в чём говнокодость, и как писать правильно? Он там что то про JOIN говорил.
qnikst 13.06.2010 15:51 # +1
говнокодовость в том, что не по стандарту SQL-95/99. Однако все DB понимают такой диалект.
Так же говнокодовость в том, что может скрывать незнание разницы между RIGHT/INNER/LEFT JOIN.
xXx_totalwar 14.06.2010 08:16 # +1
и все субд (а не базы данных, учим матчасть быстро, решительно) такой синтаксис понимают потому, что не по стандарту, ну-ну, гений, блджад.
http://savage.net.au/SQL/sql-99.bnf.html#table%20reference%20list
qnikst 14.06.2010 11:05 # −3
avamana 13.06.2010 10:25 # 0
потому что соединить и объединить это разные вещи. Перечисление в секции FROM вообще плохой тон. в твоем запросе нельзя использовать ни левое ни правое объединение, только внутренние.
Если хочешь больше критики запости запрос на сайте gavnokod.ru))))
telnet 13.06.2010 10:34 # +5
...но это не более чем украшательство, т.к. два данных запроса эквивалентны: из ON парсер переносит условия во WHERE, а запятая и INNER JOIN - это одно и то же.
Короче, камрад. Вместо того чтобы слушать, что тебе сказали хрены с горы, которые сами ни бельмеса не соображают (судя по тому, что они тебе наговорили, между прочим), но лезут в вебдев, лучше набери литературы и сиди разбирайся. И да, это не сайт помощи новичкам. Его тематику ты можешь прочитать вверху страницы.
Страйкер, приди, сделай уже что-нибудь.
tz-lom 13.06.2010 10:49 # −2
за разъяснениями - к EXPLAIN
telnet 13.06.2010 10:55 # +1
qnikst 13.06.2010 15:48 # +4
EXPLAIN SELECT u.login, g.name FROM users u, groups g WHERE u.id = '5' AND g.id = u.groupid
EXPLAIN SELECT u.login, g.name FROM users u INNER JOIN groups g ON .groupid = g.id WHERE u.id = '1'
найдите 10 отличий.
вот зачем давать громкие комментарии не разбираясь в вопросе, или предлагать тест, самому его не проверив.
guest 14.06.2010 14:36 # +1
qnikst 14.06.2010 14:38 # 0
hint он будет выглядеть точно так же, как и с условиями в where.
guest 14.06.2010 17:55 # +1
qnikst 14.06.2010 18:37 # −1
guest 14.06.2010 18:59 # 0
qnikst 14.06.2010 19:02 # 0
guest 15.06.2010 05:57 # +1
за разъяснениями - к EXPLAIN"
А ты тут начал залупоном махать, орать, что это не правда. Кароче говоря сфейлил.
qnikst 15.06.2010 16:28 # −1
зри в корень дискуссии
guest 15.06.2010 17:42 # 0
guest 14.06.2010 14:38 # 0
Aligan 13.06.2010 14:27 # 0
p.s. приходилось видеть такие запросы с запятой, где таблиц более 2, ну чем не гамнокод.
2 p.s. поэтому лучше человека щас направить на то, чтобы он начал писать запросы в соответсвии со стандартом.
telnet 13.06.2010 15:07 # 0
Ммм... В русском переводе мануала к 4.0 говорится, что для LEFT JOIN и RIGHT JOIN такой перенос выполняется (про INNER JOIN, правда, ни слова). В англоязычном к той же версии этого нет. Косяк переводчиков, что ли...
> для меня более читабельнее и интуитивно понятней будет запрос, когда используется операция с JOIN'ом а не операция "С запятой"
Поддерживаю. В общем-то, это часть того, что человеку недообъяснили на форуме, с которого он пришёл.
guest 14.06.2010 12:07 # 0
guest 14.06.2010 16:04 # 0
guest 15.06.2010 08:33 # +1
wwwguru 14.06.2010 20:43 # 0
guest 15.06.2010 05:59 # +2
xXx_totalwar 13.06.2010 11:25 # +2
Lure Of Chaos 13.06.2010 13:50 # 0
ну для самообразования, конечно, полезно, хотя и только в качестве доп.мат.
xXx_totalwar 13.06.2010 13:57 # 0
avamana 13.06.2010 15:22 # −1
Сайты для развлечения пишу.. и в такую глубь (haskell(clean), ml, erlang, lisp) погружаться не хочеться.
xXx_totalwar 13.06.2010 15:46 # +4
- надоело бухать|геймить|хней страдать, пойду-ка сайты писать
pushkoff 15.06.2010 22:20 # 0
- надоело бухать|геймить|хней страдать, напишу-ка я убийцу крайзиса/вова/доты/т.п.
а с началом каникул все сильно усугубляется...
guest 15.06.2010 22:24 # −3
guest 16.06.2010 07:43 # 0
Lure Of Chaos 13.06.2010 19:21 # −1
guest 14.06.2010 12:08 # 0
Lure Of Chaos 14.06.2010 14:22 # 0
guest 14.06.2010 14:39 # 0
Lure Of Chaos 14.06.2010 19:23 # 0
guest 15.06.2010 08:34 # 0
Lure Of Chaos 15.06.2010 21:27 # 0
guest 15.06.2010 13:08 # +1
Lure Of Chaos 15.06.2010 21:27 # 0
guest 16.06.2010 08:22 # 0
Lure Of Chaos 17.06.2010 11:38 # 0
Кстати, это не только ирония, но и грустная правда: я видел, как некоторые (коим компутерная грамота, ну, не дано) производят двойной клик: нажимают кнопку, секунду держат, отпускают, через секунду еще раз нажимают, держат секунду, отпускают. И не понимают, что не так, если за это время успевают дрогнувшей рукой сделать драг-н-дроп
guest 16.06.2010 07:45 # 0
guest 16.06.2010 08:23 # −1
guest 18.06.2010 11:42 # 0
Lure Of Chaos 19.06.2010 15:29 # −1
Анонимус 13.06.2010 15:45 # 0
Говногость 13.06.2010 19:30 # 0
Он вроде бы уже устарел? На его основе OCaml и F# уже есть. Или ml лучше своих потомков? Чем-то принципиально отличается?
xXx_totalwar 13.06.2010 19:37 # +1
Говногость 13.06.2010 19:43 # +1
http://www.mpi-sws.org/~rossberg/sml-vs-ocaml.html
зы: OCaml - более популярен + объектный.
зыы: Использую OCaml в виде F# для всяких тулз.
Webkill 15.06.2010 12:00 # −2
guest 15.06.2010 13:09 # +5
Webkill 15.06.2010 13:46 # −4
Типизация в таких языках мощнее банальной ООПной, она покрывает ООП с запасом... Но всё равно суют... Напр. назначение O'Haskell'а мне так и не понятно...
guest 15.06.2010 14:28 # +2
Нахватаются поверхностных знаний и кончают от своего ЧСВ...
Webkill 15.06.2010 23:41 # −3
ООП в 90% юзается для полиморфизма (чтобы диспатчить по линии родитель-потомок для code-reuse) (syntax-driven-инкапсуляция данных не так важна, один хрен во всяких сиплюсах и явах к полям обращаются через методы-геттеры-сеттеры), а в ФЯ это всё намного обширнее, т.е. ООП можно сказать это частный, скромный случай того, что есть в ФЯ... (с несколько иными акцентами, правда, crucial только для обезьянок типа тебя)
guest 16.06.2010 00:57 # +1
А так же для инкапсуляции и наследования.
Быстро читать википедию, школьник.
>>чтобы диспатчить по линии родитель-потомок для code-reuse
кого диспатчить-то? Ты про передачу событий что ли и паттерн chain of responsibility?
Слышал звон, да не знаешь где он?
Какая же каша у тебя в голове(((
>> т.е. ООП можно сказать это частный, скромный случай того, что есть в ФЯ
дада, сынок, ООП это частный случай ФЯ. А Лондон столица Парижа.
Мне кажется тебе нужно выкинуть из головы всю ту кашу, что ты туда зачем-то накидал, и начать с основ.
Почитать, что такое структурное программирование, чем процедурное отличается от объектно-ориентированного, а императивное от функционального.
Без обид, но с таким маразмом в мозгах ты ничего сложнее hello world не напишешь.
Пора взрослеть
guest 16.06.2010 06:42 # −2
Webkill 16.06.2010 16:21 # −1
> А так же для инкапсуляции и > наследования.
> Быстро читать википедию, школьник.
Я же выше написал - что инкапсуляция данных мало юзается, один хрен для доступа к данным объекта в основном геттеры/сеттеры используются. Публичные поля объекта - моветон в современном ООП.Что касается наследование, то он тоже редко где на самом деле надо. Главное (что в теории, что на практике) - это полиморфные методы и инкапсуляция вспомогательных методов. Опровергай.
>Слышал звон, да не знаешь где он?
> Какая же каша у тебя в голове(((
Я тебя не понимаю.
> Пора взрослеть
А тебе сколько лет?..
pushkoff 16.06.2010 16:31 # −4
отличный признак говнокода - это наличие геттеров и сеттеров на все поля класса...
Webkill 16.06.2010 16:44 # −1
наоборт, признак говнокода - прямое обращение, потому что в любой момент логика может поменяться. на эти грабли напр. наступили разрабы моно (или глиба?), они напрямую обращались к полям по всему коду, а потом когда поменялась чуть-чуть логика, пришлось по всему коду выискивать и переделывать (повсюду заменили на сеттеры/геттеры, чтобы потом опять не заниматься тем же).
pushkoff 16.06.2010 17:36 # −3
а если нужны, то где-то произошел архитектурный фейл...
guest 16.06.2010 17:40 # 0
pushkoff 16.06.2010 18:05 # −1
Lure Of Chaos 16.06.2010 18:44 # 0
а публик-апи должно быть вынесено в интерфейсы, а там как хотите: прокси, фасады...
guest 16.06.2010 18:53 # +2
guest 18.06.2010 02:57 # 0
Поскольку ты полный null в ООП, то единственное, что ты о нем знаешь, это что не нужно напрямую обращаться к свойствам?
Тоесть красоту архитектуры ты определяешь по тому есть ли аксессеоры/мутаторы, или нет.
А в C#, где проперти скрывает филд -- ты бы убился сразу.
Твои рассуждения выдают в тебе третеклассника.
Это все равно, что сказать что "если в программе нет гоуту -- это хорошая программа".
Почитай что нить про ООП, задолбал уже свое невежество мохровое в сеть изливать.
Webkill 18.06.2010 03:36 # −1
У тебя глюки? Где я это говорил? Перестань в меня вкладывать левые мысли, сука.
Lure Of Chaos 16.06.2010 18:41 # 0
guest 16.06.2010 18:45 # +2
нет, это не говно, это высшая форма я даже не знаю какого говнокода...
Lure Of Chaos 16.06.2010 19:06 # 0
Хороший код - это понятный и эффективный код, а не по "тру"-стандартам. В одном место какой-то подход оправдан, в другом он же - полное гумно
pushkoff 16.06.2010 18:50 # 0
вместо кучи геттеров/сеттеров, передавать данные в конструкторы, можно написать метод Init с кучей параметров одновременно и тп.
Lure Of Chaos 16.06.2010 19:08 # 0
а класс может и не реализовывать функционал, он может быть просто дата-холдером
pushkoff 16.06.2010 19:17 # 0
Lure Of Chaos 16.06.2010 19:22 # 0
guest 17.06.2010 02:54 # 0
В нормальном классе (если это не DTO) 90% свойств -- приватные.
Если у твоего класса все свойства доступны через аксессоры, и все ими пользуются, то одно из двух: или это DTO или это запах кода "envy class" и ты горе-архитектор.
Пойми: если ты не знаешь основ ООП и не умеешь им пользоваться -- это еще не значит что ООП -- говно.
Ну не у всех проекеты из 15ти строк на javascript, как у тебя.
Не всем так повезло.
>>Что касается наследование, то он тоже редко где на самом деле надо. Главное (что в теории, что на практике) - это полиморфные методы
а полиморфизм по-твоему как работает? Без наследования?
И вообще -- открой gang of four, почитай хотя бы пару паттернов (template method например) и узнаешь, зачем наследование нужно.
Webkill 17.06.2010 03:51 # −1
разуй глаза, я вообще-то я говорил про публичные поля объекта. считается моветоном и вообще непрактичено иметь публичные поля - используют методы-аксессоры (в унылых языках где нет поддержки свойств). А раз так, получается что поля объекта всегда приватные и в отношении интерфейсов идёт акцент на работу с методами. Т.е. ООП на самом деле не ООП, а МОП. Метод-ориентированное программирование, ха-ха. Если все поля реально приватные, то понятия инкапсуляции в этой части перестоит иметь смысл, потому что без сладкого нет горбкого, без горького нет сладкого - а без публичного нет приватного. Понимаешь мысль, баран?
> а полиморфизм по-твоему как работает? Без наследования?
Тьфу ты, я там недописал, я имел в виду наследование объектной части, я не имел в виду переопределение методов.
Моя мысль была к тому, что в ООП крутится реально всё не вокруг объектов, а вокруг методов и о том, как их обобщить на классы. А учитывая что типизация в оопе хуёвая зачастую, не то что всеми нами любимые алгебраические типы, то встаёт вопрос. Классы/типы - хуйня, всё крутится вокруг методов. А почему не начать юзать ФЯ?
> И вообще -- открой gang of four, почитай хотя бы пару паттернов (template method например) и узнаешь, зачем наследование нужно.
выпердыш ебанутых фанатиков этот ваш генг оф фор.
guest 16.06.2010 06:40 # 0
guest 16.06.2010 07:04 # −1
А там нет ООП дерьма. Это вы, обезьяны, без ООП, как без бананов...
guest 16.06.2010 07:21 # −1
guest 16.06.2010 07:34 # +3
guest 16.06.2010 08:25 # 0
guest 16.06.2010 08:26 # −4
guest 16.06.2010 08:30 # +2
Lure Of Chaos 16.06.2010 18:47 # −1
guest 16.06.2010 18:51 # +3
pushkoff 16.06.2010 12:56 # +1
и равносильно ли это
object->method();
этому
SomeClass_Method( object );
поэтому можно похоливарить есть ли в линуксе ООП...
guest 16.06.2010 13:06 # +1
pushkoff 16.06.2010 13:10 # −1
guest 16.06.2010 13:14 # −1
pushkoff 16.06.2010 16:17 # −1
guest 16.06.2010 17:02 # +2
guest 16.06.2010 17:06 # +2
Webkill 16.06.2010 16:27 # 0
по определению, ООП это парадигма. то, что ты пишешь - это синтаксис. Парадигма мало соприкасается с синтаксисом. Вот синтаксис может реализовать какую-то парадигму - но не более чем как "синтаксический сахар". Без синтаксического сахара мы имеем коде конвеншонз.
ООП - это философия (достаточно гадкая), концепция в первую очередь.
Поэтому object->method(); равняется SomeClass_Method( object );
pushkoff 16.06.2010 16:29 # −3
то есть можно смело утверждать что в линуксе есть ООП реализованное методом "синтаксического сахара"?
Webkill 16.06.2010 16:41 # 0
из каких моих слов это следовало? нет, нельзя утверждать. ты код линукса видел хоть?
pushkoff 16.06.2010 17:33 # 0
void __sched mutex_lock(struct mutex *lock)
void __sched mutex_unlock(struct mutex *lock)
void __sched mutex_lock_nested(struct mutex *lock, unsigned int subclass)
Lure Of Chaos 16.06.2010 18:55 # 0
а для ядра ожидать использование ста уровней абстракции просто кретинизм, если мы не хотим получить супермедленную ось. Приоритет удобство программинга\скорость работы тут более сведено к скорости.
Как, кстати и код интерфейса писать на низкоуровневом языке типа ассемблер тоже идиотизм.
guest 16.06.2010 18:58 # 0
guest 17.06.2010 02:58 # −1
2) ядра, на самом деле, не такой уж и большой проект.
Там нет гигантской бизнес-логики, нет сложной доменной модели итд...
Вебкилл, я тебе еще раз говорю: Если ты не умеешь пользоваться ООП -- это не значит что оно не нужно.
Webkill 17.06.2010 03:06 # 0
13320934 строк кода конечно это вам не сложную бизнес-логику "ЧП Тараканова" написать...
http://upload.wikimedia.org/wikipedia/commons/5/5b/Linux_kernel_map.png
guest 18.06.2010 03:01 # 0
Ты сложность кода меряешь количеством строк?
Тоесть какой-нить DOS 2.0 сложнее чем система для торговой площадки на бирже потому, что DOS 2.0 писали на асм и строк кода там больше?
Иди, почитай что такое "доменная модель", вонючка
Webkill 18.06.2010 03:39 # 0
Тоесть какой-нить DOS 2.0 сложнее чем система для торговой площадки на бирже потому, что DOS 2.0 писали на асм и строк кода там больше?
Ну ты сравнил бля, код на яве и код на асме. Я-то тут вообще о си говорю. В правильном написании си-код примерно кореллирует с твой любимой яве в отношении строка/смысл (учитывая что в яве чтобы ввести одну небольшую сущность нужно по фаулерам и прочим пидарасом ввести три фабрики, семь адаптаров и ещё дохуя мусора -в стиле "программистов"-маркетологов бля).
Давай не в строчках кода, а в стоимости на переписку с нуля. Линукс стоит разработать 1.4 миллиардов долларов. А твой софт для магазина подсвечников сколлько?
Ынтерпрайз - уныло и для кодообезьянок
Webkill 17.06.2010 03:07 # 0
нет, просто потому что форсированный ООП там просто не нужен. ты прикинь.
gpr 22.06.2010 20:38 # −2
Поищи в инете на эту тему, много нового для себя откроешь.
А некоторые куски кода оттуда можно прямо на этот сайт выкладывать, отборное говно.
Webkill 22.06.2010 20:51 # −2
нет, ты не прав. ядре линукса нет c++ потому что он там не нужен.
Поищи в инете на эту тему, много нового для себя откроешь.
> А некоторые куски кода оттуда можно прямо на этот сайт выкладывать, отборное говно.
дерзай, чё! жду с нетерпением.
gpr 22.06.2010 21:40 # −2
Webkill 22.06.2010 23:10 # +1
а с++ поделия тоже текут. почему?
Lure Of Chaos 17.06.2010 11:43 # 0
на самом деле, в ядре НЕ ДОЛЖНО быть сложной логики и сервисных методов - ничего лишнего. Это должно выноситься в юзер слой в виде библиотек
guest 18.06.2010 03:02 # 0
У вебкила простая логика: чем больше строк -- тем сложнее логика. Вон он в меня кол-вом строк в ядре пихал.
Webkill 18.06.2010 03:46 # 0
Логика всегда должна быть простой. Если она сложная - то где-то в цепочке оказался пидарас.
KISS :*
Lure Of Chaos 19.06.2010 15:37 # 0
и наоборот, ОСь не может быть простой по определению.
Хотите доказать свое? напишите, тогда поверим. А брызгать здесь слюной и минусовать если не согласны излишне
Webkill 22.06.2010 20:52 # 0
у осей логика тоже простая. сложного там - только борьба с хардварным быдлосхемингом (айбиэм-писи-хардваре спроектировано индусами)
Lure Of Chaos 24.06.2010 13:57 # 0
guest 15.06.2010 20:31 # −1
пзц, вебкил, ты бы хоть почитал что ли что нить про компутеры...
а то как рот откроешь -- так хоть стой, хоть падай
guest 15.06.2010 22:25 # −5
guest 15.06.2010 23:22 # +1
guest 16.06.2010 06:42 # −6
guest 16.06.2010 06:42 # −6
guest 16.06.2010 06:43 # 0
neznau 01.07.2010 11:44 # 0
Анонимус 13.06.2010 15:44 # −3
Во вторых что такое $id?
Это в каком-то database-access-layerе указывается параметр, и потом Вы делаете "setParam"?
Или это конструкция наподобии
?
Второй вариант ужасен, и делать так не нужно.
И наконец почему у Вас пользователи в множественном числе, а группы -- в единственном?
wwwguru 13.06.2010 16:33 # −4
Или переписал с использованием ActiveRecord:
Вообще завязывай с mysql_query() - эта функция была создана во времена PHP3 для MySQL 3.x.
Безопаснее и эффективнее пользоваться таким приёмом:
qnikst 13.06.2010 16:38 # 0
http://ithappens.ru/story/2568
avamana 13.06.2010 20:58 # 0
Сейчас бы так написал
Но как понял из всего вышесказанного, надо писать так
telnet 13.06.2010 21:21 # 0
Lure Of Chaos 13.06.2010 22:44 # 0
guest 14.06.2010 03:17 # −3
Все сказки про "переносимость SQL" -- именно что сказки
striker 14.06.2010 06:43 # +2
А хранимки УГ :)
guest 14.06.2010 17:06 # −2
Да ну? Это как? ORM юзать что ли?
Глупости-то не надо говорить
guest 14.06.2010 17:22 # +2
striker 15.06.2010 01:04 # 0
но я говорил про генераторы запросов, которые могут выступать частью ORM, а не выступать в роли замены.
в чем глупость то?
guest 14.06.2010 08:33 # 0
но в этом то и плюс
guest 14.06.2010 17:05 # 0
qnikst 14.06.2010 11:07 # 0
посмотрел бы я как вы код с хранимками будете между MySQL, MS SQL, Postgres, Oracle DB, etc переносить
guest 14.06.2010 12:09 # −2
guest 14.06.2010 17:05 # 0
Вызываешь процедуру "getUserById(12)" , и получаешь инфу о юзвере
Lure Of Chaos 14.06.2010 14:24 # +1
а для переносимости - есть куча абстрактных слоев
guest 14.06.2010 02:37 # +3
striker 14.06.2010 06:41 # 0
guest 14.06.2010 08:34 # 0
wwwguru 14.06.2010 21:14 # −2
striker 15.06.2010 01:08 # +3
молодцы
wwwguru 14.06.2010 20:49 # −2
striker 15.06.2010 01:07 # +1
guest 15.06.2010 13:11 # 0
И что-то мне подсказывает ты тоже из этих 95%.
guest 15.06.2010 15:00 # +1
Lure Of Chaos 15.06.2010 21:45 # 0
люди, обыкновенные люди (ц)
guest 16.06.2010 06:44 # 0
Lure Of Chaos 16.06.2010 19:00 # +1
А обыкновенные люди ходят по коврам в сапогах, не попадают в писуар, и игнорируют такие изобретения как туалетный ёршик и освежитель воздуха.
Видите аналогию?
guest 16.06.2010 19:02 # 0
Lure Of Chaos 16.06.2010 19:17 # 0
Webkill 17.06.2010 14:24 # +1
реинакрнация капитана?
Lure Of Chaos 17.06.2010 15:44 # 0
guest 17.06.2010 23:46 # 0