Программирование

Обсуждение программ и аппаратных средств

Модераторы: Oden, Сочин, maniac, Boo

Программирование

Сообщение bello 02 Январь Воскресенье, 2005 18:25

Предлагаю в этом топе делиться опытом программирования на PHP и MySQL. Вношу свою лепту в общее дело. Может кому будет интересно в папке timoshenko лежит несколько архивчиков, в том числе и phplib. Очень нужная штука, кто решил делать что-то большее нежели домашнюю страничку. Результат применения этой фичи выглядит примерно так http://www.rabota-ukraine.com
Кто заинтересуется, как с работать с библиотекой, пишите, отвечу.
Аватара пользователя
bello

 
Сообщения: 37
Зарегистрирован: 01 Октябрь Пятница, 2004 22:06

Сообщение Гость 02 Январь Воскресенье, 2005 19:49

Хотя сейчас на PHP программировать приходится изредка (дописываю расширения в phpNuke), опыта у меня немало.

Участвовал в разработке ряда проектов (и маленьких, и больших).

Участвовал в разработке библиотек классов. Одна из них (бесплатная, но не самая лучшая :-) доступна тут http://torba.sourceforge.net

По поводу phplib-7.4.tar.gz - беглый просмотр выявил "вонючку":
global $debug;

if ($debug) {
printf("<p>table_row()<br>\n");
}

Таких строк - пруд пруди. За такой стиль убивают на месте.

А теперь вопрос для разминки:

есть таблица
user_hotel (user_id INT, hotel_id INT)

ID пользователя и ID общаги, в которой бывал пользователь.

Необходимо одним запросом извлечь хотя одного пользователя, побывавшего во всех общежитиях.


P.S. Тема хорошая, только просьба модераторам переместить её в "Общение".
Гость

 

Сообщение bello 02 Январь Воскресенье, 2005 20:16

У меня опыта стало быть по меньше, набираться стал только с этого лета. А phplib здорово помогло в освоении php, да и вообще в автоматизации сайта и созданию движка. Хотелось бы узнать, чем плох такой стиль:
if ($debug) {
printf("<p>table_row()<br>\n");
}
В общем-то никто ведь не заставляет также писать, благо библиотека сама написана на php.
Теперь насчет SQL запроса. Я для того и сделал топик, чтобы более опытные отвечали на вопросы. Может просветишь, стало интересно.
Аватара пользователя
bello

 
Сообщения: 37
Зарегистрирован: 01 Октябрь Пятница, 2004 22:06

Сообщение Гость 02 Январь Воскресенье, 2005 21:07

bello писал(а):Хотелось бы узнать, чем плох такой стиль:
if ($debug) {
printf("<p>table_row()<br>\n");
}


1. Глобальная переменная. (в ОО-библиотеке)
2. Дублирование кода. (вынести в отдельную функцию, метод, класс)
3. Дублирование представления. (а если я захочу выводить это жирным или подчёркнутым?)
4. Некорректное представление. (отсутствует закрывающий тег параграфа).

bello писал(а):В общем-то никто ведь не заставляет также писать, благо библиотека сама написана на php.


Это понятно.
Но ограничения и косости библиотек меня просто бесят.
Свежий пример (Java)
javax.servlet.http.HttpServletRequest
(весьма распространённая библиотека).

getParameterMap
public java.util.Map getParameterMap()Returns a java.util.Map of the parameters of this request. Request parameters are extra information sent with the request. For HTTP servlets, parameters are contained in the query string or posted form data.
Returns:
an immutable java.util.Map containing parameter names as keys and parameter values as map values. The keys in the parameter map are of type String. The values in the parameter map are of type String array.


И что же мы имеем - оказывается этот метод возвращает то, что описано в документации всегда, кроме параметров, переданных через multipart/form-data форму (для аплоада файлов).
Убил полдня, чтобы найти это и написать обходной путь.

bello писал(а):Теперь насчет SQL запроса. Я для того и сделал топик, чтобы более опытные отвечали на вопросы. Может просветишь, стало интересно.


На самом деле, ничего сложного, но встряхивает сильно.
Попробуй найти ответ самостоятельно.
Гость

 

Сообщение vas1 03 Январь Понедельник, 2005 03:19

az
ы.ыыыы... ты бы ещё первого числа подкинул бы эту задачку :))) я MySQL не очень хорошо знаю... на уровне SELECT, UPDATE, INSERT, DELETE а здесь я смотрю нужно встроенные функции использовать... типа count()... не сейчас.. :(
bello
по поводу этой библиотеки сказать не могу ничего кроме того, что она старенькая уже... и завести её не удалось.... копаться сейчас ой как лень... да и не хочется...
лучше скажите, кто какой шаблонной системой пользуется. и кто чё думает по поводу TYPO3 - стоит ли в ней копаться? то есть можно ли её применять для профессионального использования?
м?
Аватара пользователя
vas1

 
Сообщения: 173
Зарегистрирован: 16 Октябрь Суббота, 2004 01:39
Откуда: .dn.ua

Сообщение bello 03 Январь Понедельник, 2005 11:07

А где ты этот шаблонизатор брал? Скинь линк. Лично я пользуюсь шаблонизатором от phplib, очень доволен. Есть еще такие как FastTemplate и Smarty, но они мне меньше нравятся, FastTemplate для замены переменных использует ereg, что работает медленнее, чем preg. Это все, что я знаю.
Аватара пользователя
bello

 
Сообщения: 37
Зарегистрирован: 01 Октябрь Пятница, 2004 22:06

Сообщение bello 03 Январь Понедельник, 2005 11:19

Я тут в инете покопался и нашел русский форум про TYPO3. Линк:
http://www.typo3.ru/general.html

Говорят он чертовски сложный. Можешь почитать на http://drupal.ru/node/105
Аватара пользователя
bello

 
Сообщения: 37
Зарегистрирован: 01 Октябрь Пятница, 2004 22:06

Сообщение Гость 03 Январь Понедельник, 2005 11:25

vas1 писал(а):ы.ыыыы... ты бы ещё первого числа подкинул бы эту задачку :))) я MySQL не очень хорошо знаю... на уровне SELECT, UPDATE, INSERT, DELETE а здесь я смотрю нужно встроенные функции использовать... типа count()... не сейчас.. :(


Я не спешу.

vas1 писал(а):лучше скажите, кто какой шаблонной системой пользуется.


В PHP использовали 2 подхода (собственные).

1. Глобальные вставки.
Класс Template.
Вставки - ассоциативный массив.
Шаблон - текст, переменные в виде {%variable_name%}.
Когда парсим шаблон все переменные шаблона меняются на значения вставок, если нет, то на пустую строку.
Можно запарсить шаблон в переменную вставки и т.д.

2. Защищённые шаблоны и локальные вставки.
Каждый шаблон представляется отдельным объектом, имеет свои собственные вставки, валидируются имена переменных в тексте шаблона.


vas1 писал(а):и кто чё думает по поводу TYPO3 - стоит ли в ней копаться? то есть можно ли её применять для профессионального использования?


CMS?
Не знаю. Не использовал. Может и стоит.
Можно ли применять - нужно копать и смотреть, я бы в первую очередь обратил внимание на вопрос "на сколько легко добавить туда отсутствующую функциональность или подкорректировать имеющуюся?"
Гость

 

Сообщение Гость 15 Январь Суббота, 2005 19:01

Итак, вопрос всё ещё открыт:

есть таблица
user_hotel (user_id INT, hotel_id INT)

ID пользователя и ID общаги, в которой бывал пользователь.

Необходимо одним запросом извлечь хотя одного пользователя, побывавшего во всех общежитиях.



Этот вопрос поставил в тупик всех студентов ДонГИИИ, которым я его задавал (2, 3 и 5 курсы).
Я так понимаю, что здесь много людей из ДПИ.
Меня интересует как там обстоит с этим делом.
Гость

 

Сообщение Гость 15 Январь Суббота, 2005 19:36

az писал(а):Итак, вопрос всё ещё открыт:

есть таблица
user_hotel (user_id INT, hotel_id INT)

ID пользователя и ID общаги, в которой бывал пользователь.

Необходимо одним запросом извлечь хотя одного пользователя,
побывавшего во всех общежитиях.

У меня есть вопрос:на чем мы делаем?На SQL или TSQL?Или какой там диалект у MySQL?
Гость

 

Сообщение Гость 15 Январь Суббота, 2005 20:09

:arrow: Maz!1a

На самом деле, это не трудный вопрос.
Просто я сам на нём я споткнулся при жёстком лимите времени и понял, что это хороший тестовый вопрос по знанию SQL.


:arrow: Par2zan

Ограничений нет.
Гость

 

Сообщение ded 15 Январь Суббота, 2005 21:07

az писал(а):Итак, вопрос всё ещё открыт:

есть таблица
user_hotel (user_id INT, hotel_id INT)

ID пользователя и ID общаги, в которой бывал пользователь.

Необходимо одним запросом извлечь хотя одного пользователя, побывавшего во всех общежитиях.



Этот вопрос поставил в тупик всех студентов ДонГИИИ, которым я его задавал (2, 3 и 5 курсы).
Я так понимаю, что здесь много людей из ДПИ.
Меня интересует как там обстоит с этим делом.


SELECT user_id FROM user_hotel;
Данный запрос выведет ВСЕХ пользователей, в том числе и того, который побывал во всех общагах. (если такой имееца) :)
Аватара пользователя
ded

 
Сообщения: 71
Зарегистрирован: 11 Ноябрь Вторник, 2003 17:33

Сообщение Гость 15 Январь Суббота, 2005 21:12

ded писал(а):SELECT user_id FROM user_hotel;
Данный запрос выведет ВСЕХ пользователей, в том числе и того, который побывал во всех общагах. :)



Да, выведет.
Только толку?

Нужно узнать кто конкретно (user_id) побывал во всех общагах.
Интересует любой из побывавших.
Гость

 

re

Сообщение ded 15 Январь Суббота, 2005 22:48

SELECT user_id FROM user_hotel WHERE user_id IN (hotel_id);
Аватара пользователя
ded

 
Сообщения: 71
Зарегистрирован: 11 Ноябрь Вторник, 2003 17:33

Re: re

Сообщение Гость 15 Январь Суббота, 2005 23:00

ded писал(а):SELECT user_id FROM user_hotel WHERE user_id IN (hotel_id);



Это вернёт тех пользователей, чьи номера совпадают с одним из общежитий, которые они посетили.

Т.е. для таблицы

1 1
1 2
1 3
2 1
2 2
3 1

будет возвращено две записи
1
2
Гость

 

Сообщение vitalyb 16 Январь Воскресенье, 2005 16:11

az
А как коды общаг кодируются? ну, скажем от 1 до 500 по порядку. или?
vitalyb

 
Сообщения: 507
Зарегистрирован: 16 Октябрь Суббота, 2004 00:25

Сообщение Гость 16 Январь Воскресенье, 2005 16:15

vitalyb писал(а):az
А как коды общаг кодируются? ну, скажем от 1 до 500 по порядку. или?



Ну хорошо.

Упростим задачу.

Для простоты положим, что коды заполняют диапазон целых чисел от 1 и до 10.

Известно, что всего общаг - 10.
Гость

 

Сообщение vitalyb 16 Январь Воскресенье, 2005 18:46

az
Ну, пусть так будет.

SELECT user_id FROM (SELECT user_id, SUM(hotel_id) AS q FROM user_hotel GROUP BY user_id) WHERE q=55;

Критика велком. :) но с sql я довольно редко и неглубоко сталкиваюсь...
vitalyb

 
Сообщения: 507
Зарегистрирован: 16 Октябрь Суббота, 2004 00:25

Сообщение Гость 16 Январь Воскресенье, 2005 18:55

vitalyb писал(а):az
Ну, пусть так будет.

select user_id from (select user_id, sum(hotel_id) as q from user_hotel group by user_id) where q=55;

Критика велком. :) но с sql я довольно редко и неглубоко сталкуюсь...



Внутренние подзапросы нельзя помещать в предложения from, а только в where и having (для оператора select).

Т.е запрос не работает.

Кроме того, зачем в подзапросе вычисляется сумма номеров, если можно было подсчитывать их количество (count)?

В общем-то, близко подошёл к ответу.
Гость

 

Сообщение vitalyb 16 Январь Воскресенье, 2005 19:05

Ну, по поводу "не работает", это от диалекта зависит. И у меня работает ;)

Код: Выделить всё
sqlite> select * from user_hotel;
1|2
2|5
4|1
4|2
4|3
4|4
4|5
4|6
4|7
4|8
4|9
4|10
5|10
sqlite> SELECT user_id FROM (SELECT user_id, SUM(hotel_id) AS q FROM user_hotel GROUP BY user_id) WHERE q=55;
4


количество... да, действительно. :)

Может пусть студенты ДПИ дальше отшлифуют?
vitalyb

 
Сообщения: 507
Зарегистрирован: 16 Октябрь Суббота, 2004 00:25

След.

Вернуться в Hard&Soft

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 7

cron