Võrgurakendused I / Programmeerimise põhikursus
#782
Отправлено 03 декабря 2010 - 21:38
Когда я перестану пить...совершенно, все скажут: "Как же он хорош! Какая милашка!" © НаиВ
Когда таким, как ты сейчас, был я, таких, как я сейчас, не слушал. © Тараканы
#786
Отправлено 04 декабря 2010 - 01:23
1) Создать таблицу friends и выделить в ней 3- поля(id,user,pass,email,status);
2) Создать кнопку Добавить друзя и обработчик для неё click,в котором через аякс пышному скрипту(как в вк) передавался бы логин и заносился бы инсертом(походу херню сморозил)в таблицу с френдами;
3)Создать кнопку Отправить приглашение будущему друзю(ну чот такое),но опять-таки через аякс!(о_О!) проверять,есть ли такой аккаунт уже в таблицы френдов.
Если есть,то выдать предупреждение мол *такой друзь уже есть!*
4)Для вывода списка друзей тупо заюзать while($row = mysql_fetch_arra($r)) {}
Есть у кого какие мысли ?? Теряется логика,блин... Нарисовать это дело,чтоли.
#787
Отправлено 04 декабря 2010 - 11:09
P.S. Извините не сдержался.
P.P.S. Ты составь полную структуру отношений, тогда проще будет с базами
P.P.P.S По поводу реализации, это уже твоё личное дело.
Плутарх - (ок. 46 — ок.120) - древнегреческий писатель, историк
#789
Отправлено 04 декабря 2010 - 16:52
у frienship идет many to many к юзер, если конечно ничего не путаю. Так что требуется одна таблица где будет ид записи ид юзера номер один ид юзера номер два. Если запись есть в таблице, значит друзья, если нет значит не друзья. Опять же возможны варианты, типа как уместить всю БД в одну таблицу, но это уже на вкус и цвет...
Плутарх - (ок. 46 — ок.120) - древнегреческий писатель, историк
#790
Отправлено 04 декабря 2010 - 20:55
Народ,в 4 дз выргу как организовать проверку,является ли человек в списке мои друзья? У меня только складывается такое решение:
1) Создать таблицу friends и выделить в ней 3- поля(id,user,pass,email,status);
2) Создать кнопку Добавить друзя и обработчик для неё click,в котором через аякс пышному скрипту(как в вк) передавался бы логин и заносился бы инсертом(походу херню сморозил)в таблицу с френдами;
3)Создать кнопку Отправить приглашение будущему друзю(ну чот такое),но опять-таки через аякс!(о_О!) проверять,есть ли такой аккаунт уже в таблицы френдов.
Если есть,то выдать предупреждение мол *такой друзь уже есть!*
4)Для вывода списка друзей тупо заюзать while($row = mysql_fetch_arra($r)) {}
Есть у кого какие мысли ?? Теряется логика,блин... Нарисовать это дело,чтоли.
1) В данном случае в таблицу friends не нужно ничего писать, кроме ID двух человек, которые продтвердили дружбу между собой внутри приложения.
2) Слишком усложняешь. Просто не отображай кнопку для пользователей, ID которых есть в таблице friends. Сортировку SQL-запросом выполнить можно.
3) Опять усложняешь с AJAX. Создай еще одну таблицу в БД для хранения запросов о дружбе. Каждый раз при логине пользователя выводи ему на главной странице все существующие для него запросы с двумя кнопками - "принять" и "отклонить". "Принять" заносит запросившего в список друзей и удаляет уже ненужный запрос из таблицы. "Отклонить" сразу же удаляет запрос из таблицы БД.
Проверку нужно ставить не при отображении запроса о дружбе, а при подаче его - т.е. не выводить кнопку "Добавить в друзья" если пользователи уже и так друзья.
4) Лупом, да. Только не забудь правильный SQL-запрос построить, который бы выделял из таблицы friend только друзей конкретного пользователя, а не всех подряд.
P.S Конечно нарисуй Это всегда помогает при разработке. А еще ERD смоделируй, чтобы понять как будет работать твоя БД.
у frienship идет many to many к юзер, если конечно ничего не путаю.
Optional one-to-many. У 1 пользователя может быть много друзей, но может и вообще не быть.
Сообщение изменено: K1sa (04 декабря 2010 - 21:06 )
#791
Отправлено 04 декабря 2010 - 22:13
а ну да, че-то поздапарился Один ко многим
P.S. Ну теоретически, только теоретически можно создать БД вообще с одной ячейкой, но это извращение %).
Если все же интересует. То подумай об ХМЛ.
Верхний нод - юзер, у юзера атрибуты типа новости, друзья, и все такое. И скрипт загружает из базы эту ячейку обрабатывает и через какой-нить rowmapper преобразует все в нормальный вид, но это все...мсье знает толк в извращениях..
P.P.S. трололо ))
Плутарх - (ок. 46 — ок.120) - древнегреческий писатель, историк
#792
Отправлено 04 декабря 2010 - 22:18
угу и для полного счастья еще придумать сверхгениальный алгоритм сериализации/десериализации объектов со сжатием данных для работы с одной этой ячейкой в базе данных
Сообщение изменено: Mr. Positive (04 декабря 2010 - 22:20 )
Bachelor of Eternity
#793
Отправлено 04 декабря 2010 - 22:30
Вот лучше бы поделились идеями насчет хранения списка друзей. У меня тут 3 способа назрело, но хочется еще мнения услышать. Кто какие таблицы использует и как запрашивает хотя бы отображение этого списка из БД.
#794
Отправлено 04 декабря 2010 - 22:38
исключает надобностьЭто типичное задание для айтишников 1-ого курса.
Вот лучше бы поделились идеями насчет хранения списка друзей. У меня тут 3 способа назрело, но хочется еще мнения услышать. Кто какие таблицы использует и как запрашивает хотя бы отображение этого списка из БД.
P.S.
Спасибо, Кэп!Ее решение сводится к использованию правильно смоделированных таблиц и постороению правильных SQL-запросов.
Bachelor of Eternity
#797
Отправлено 04 декабря 2010 - 22:51
ну из твоих сообщений я вижу только
а). то, что ты все и так знаешь
б). то, что это задание для 1-ого курса, а так как ты уже на 2-ом, то оно априори слишком просто и обсуждать тут нечего
в). да и помощь тебе не нужна, а общение и советы как раз к помощи можно прировнять
В общем не понятно чего ты хочешь
Bachelor of Eternity
#798
Отправлено 04 декабря 2010 - 22:52
K1sa, Я рассуждаю из простого желания потрещать о чем-то отвлеченном ))
Я как-то другу сказал, что читал спор между оракл и постгре. Смысл том что одна база круче другой из-за того что одна может выдержать ну допустим 10 миллионов транзакций, а другая только 9млн. На что он процитировал персонажа из СССР: ядерный потенциал США сможет уничтожить Землю 30 раз, а яд. пот. СССР только 26. Какой эпик...
Суть этого всего в том, что "идеального" способа нет, оптимальность покажет только процесс использования...чего в принципе у этих проектиков не будет ;)
Ну если вы настаиваете так, то : хранение списка друзей вообще это массив. Сама таблица скорей всего будет иметь 3 ячейки ид ид1 ид2. Причем при sql запросе проверяется оба варианта то бишь проверяется ид1 ид2 и наоборот ид2 ид1. Вроде того. Можно конечно придумать что-то поинтересней, но зачем
Плутарх - (ок. 46 — ок.120) - древнегреческий писатель, историк
#799
Отправлено 04 декабря 2010 - 23:04
K1sa,
ну из твоих сообщений я вижу только
а). то, что ты все и так знаешь
б). то, что это задание для 1-ого курса, а так как ты уже на 2-ом, то оно априори слишком просто и обсуждать тут нечего
в). да и помощь тебе не нужна, а общение и советы как раз к помощи можно прировнять
Для 1ого курса айтишников, я ж не айтишник. Даже если задание простое, это не значит что его нельзя обсудить и подумать над альтернативными способами его решения.
Насчет помощи.. может я другим хочу помочь, поэтому и пишу?;)
Ну если вы настаиваете так, то : хранение списка друзей вообще это массив. Сама таблица скорей всего будет иметь 3 ячейки ид ид1 ид2. Причем при sql запросе проверяется оба варианта то бишь проверяется ид1 ид2 и наоборот ид2 ид1. Вроде того. Можно конечно придумать что-то поинтересней, но зачем
Объясни мне, зачем хранить лишние данные в БД? Зачем нужно 3 ячейки? Если ты говоришь что SQL-запрос будет проверять отношение ID_1 к ID_2 и наоборот, значит ты имеешь ввиду такую таблицу:
| ID | ID_1 | ID_2 | ------------------ | 1 | uid1 | uid2 | | 2 | uid2 | uid1 |
Я правильно понимаю? Т.е. для хранения одной связи между пользователями ты будешь использовать по 3 ячейки в двух строчках таблицы. Это конечно круто, будет быстро работать и легко сортировать списки, но дубликация данных как то портит всю картину. Да и непонятно тогда для чего тебе нужна ячейка с ID
Сообщение изменено: K1sa (04 декабря 2010 - 23:05 )
#800
Отправлено 04 декабря 2010 - 23:09
#801
Отправлено 04 декабря 2010 - 23:11
Народ,какими плагинами/расширениями/виджетами (или что там ещё есть) можно просмотреть размеры в пикселях/процентах объектов на экране? (В Опера) А то на глаз прикидывать в блокноте сколько там осталось пикселей оттуда-то досюда-то имхо не катит.Сначала подумал,чтобы брать в процентах от ширины/высоты экрана,но ведь у разных браузеров разные отступы(Ещё и в разных версиях разные отступы - зашибись).Следовательно,такой вариант не катит.
Планировать размеры заранее, когда рисуешь макет в редакторе, например. Иначе на глаз.
#802
Отправлено 04 декабря 2010 - 23:23
| ID | ID_1 | ID_2 |
------------------
| 1 | uid1 | uid2 |
| 2 | uid2 | uid1 |
Я имел ввиду как раз что бы проверялось в ID_1 ID_2 оба варианта как то есть uid1 и uid2 так и наоборот
Плутарх - (ок. 46 — ок.120) - древнегреческий писатель, историк
#804
Отправлено 05 декабря 2010 - 01:37
Есть договорённость, что у каждого объекта должен быть свой уникальный ID. В данном случае он позволит различать наши объекты "friendship" из базы. Если не будет ID, то придётся при каждом обращении к определённым "дружбам" (удаление, обновление статуса, ...) в таблице делать запрос наподобиезачем хранить лишние данные в БД? Зачем нужно 3 ячейки?
Да и непонятно тогда для чего тебе нужна ячейка с ID
Много буков. ИМХО, приличнее будет выглядеть%ПЕРВАЯ ЧАСТЬ ЗАПРОСА% WHERE user1="%USERID1%" AND user2="%USERID2%" OR user2="%USERID1%" AND user1="%USERID2%"
%ПЕРВАЯ ЧАСТЬ ЗАПРОСА% WHERE id="%ID%"
Какие отступы? От краёв документа? Их можно задать - например, сделать нулевыми. Кстати, заданный в пикселях размер будет коряво выглядеть, если будешь менять размеры броузера или делать zoom.Сначала подумал,чтобы брать в процентах от ширины/высоты экрана,но ведь у разных браузеров разные отступы
В таблице с друзьями, кстати, было бы неплохо сделать "статус" - т.е. принята ли дружба. А по 2 строки на дружбу двух людей плодить не надо - можно обойтись и одной, в MySql есть необходимые для этого команды.
Сообщение изменено: Tasmanian Fox (05 декабря 2010 - 01:37 )
#805
Отправлено 05 декабря 2010 - 02:57
Есть договорённость, что у каждого объекта должен быть свой уникальный ID. В данном случае он позволит различать наши объекты "friendship" из базы. Если не будет ID, то придётся при каждом обращении к определённым "дружбам" (удаление, обновление статуса, ...) в таблице делать запрос наподобие
Много буков.
Если ты сделаешь ID уникальным, ты только затруднишь себе задачу при сортировке и отображении списка друзей, т.к. у тебя будет 2 разных ID на одну связь. Тебе придется 2 раза обращаться к базе, чтобы получить результат с дружбой пользователей. К тому же в таблице, у которой реляция one-to-many между двумя другими таблицами уникальных ключей не делают. Если mysql на InnoDB движке, то forein key по отношению к уникальным ключам двух других таблиц (или вообще к одной таблице с пользователями в нашем случае).
И не нужно боятся строить большие запросы, это наоборот плюс. Что то типо
SELECT a.ID, b.имя, b.фамилия FROM друзья a, пользователи b WHERE ID_дружбы IN (SELECT ID_дружбы FROM друзья WHERE ID = 'ID_залогинено_юзера') AND a.ID != 'ID_залогинено_юзера' AND a.ID = b.ID
Советую почитать: http://www.kirupa.co..._db_design7.htm
Сообщение изменено: K1sa (05 декабря 2010 - 03:00 )
#809
Отправлено 05 декабря 2010 - 18:37
По поводу первой мысли - поддерживаю полностью, большие запросы, не требующие осуществления каких-либо дополнительных запросов, рулят. Насчёт второй идеи - можно выкрутиться через UNION, объединяющий 2 запроса в один, при условии, что названия столбцов совпадают.И не нужно боятся строить большие запросы, это наоборот плюс.
Тебе придется 2 раза обращаться к базе, чтобы получить результат с дружбой пользователей.
Для примера. Цель: выцепить ИД, имена и фамилии твоих друзей - как тех, кто тебя добавил, так и тех, кого добавил ты:
SELECT user.id, user.name, user.surname FROM user RIGHT JOIN friendship ON user.id = friendship.subject WHERE friendship.accept = '1' AND friendship.object = '$user->id' UNION SELECT user.id, user.name, user.surname FROM user RIGHT JOIN friendship ON user.id = friendship.object WHERE friendship.accept = '1' AND friendship.subject = '$user->id'
Куски запросов можно также сортировать. Вот например отсортированные по дате в порядке убывания последние 20 новостей друзей:
SELECT news.id, news.content, user.name, user.surname, user.id as uid, news.date AS date FROM news RIGHT JOIN user ON news.author = user.id LEFT JOIN friendship ON friendship.object = user.id WHERE friendship.subject = $uid AND friendship.accept = '1' AND news.content != 'NULL' UNION SELECT news.id, news.content, user.name, user.surname, user.id as uid, news.date AS date FROM news RIGHT JOIN user ON news.author = user.id LEFT JOIN friendship ON friendship.subject = user.id WHERE friendship.object = $uid AND friendship.accept = '1' AND news.content != 'NULL' ORDER BY date DESC LIMIT 20
Особенно про список друзей в одной ячейке понравилось. Я бы даже сказал не кунгфу, а фехтование на сковородкахМоё кунгфу круче вашего