Форум АНТИЧАТ

Форум АНТИЧАТ (https://forum.antichat.xyz/index.php)
-   PHP, PERL, MySQL, JavaScript (https://forum.antichat.xyz/forumdisplay.php?f=37)
-   -   Привязка (https://forum.antichat.xyz/showthread.php?t=135964)

restart_05 19.08.2009 14:40

Привязка
 
Допустим есть логин и этот логин хранится в бд mysql.
Как можно привязать друзей к этому логину сохранить их и вывести на страницу. Если сохранять каждый логина то нужно писать дополнительную строку в бд. Как это можно организовать с php или ajax

FreShBY 19.08.2009 14:44

Создать вторую таблицу вида:
userID, friendID

или в этой же таблице в ячейку через зяпятую IDы друзей

restart_05 19.08.2009 14:47

ммм... А какой запрос отправлять, чтоб через запятую вставляло ??

L I G A 19.08.2009 14:55

Цитата:

Сообщение от restart_05
ммм... А какой запрос отправлять, чтоб через запятую вставляло ??

mysql_query("INSERT INTO `тратата` SET `id`='".$id.",'....

restart_05 19.08.2009 14:56

спс

restart_05 19.08.2009 17:53

Возник такой вопрос как вывести эти данные

L I G A 19.08.2009 18:11

Цитата:

Сообщение от restart_05
Возник такой вопрос как вывести эти данные

PHP код:

$r=mysql_query('SELECT * FROM `table` ORDER BY `id`')
or die (
mysql_error());
while(
$array=mysql_fetch_assoc($r)){
$id[]=$array['id'];


в данном случае все id запишутся в массив $id

restart_05 19.08.2009 18:16

Это понятно а как вывести по 1 where id=1 предположим

L I G A 19.08.2009 18:20

Цитата:

Сообщение от restart_05
Это понятно а как вывести по 1 where id=1 предположим

PHP код:

$news=mysql_query('select *  from  `table` where id = "' $id '" ')
or die (
mysql_error());
$a mysql_fetch_assoc($news);
$id=$a['id']; 


restart_05 19.08.2009 18:39

(( То что ты пишешь выводит все как есть к примеру 4,43,432,2,12 и выводит а мне нужно
чтоб так
4
43
432
2
12

L I G A 19.08.2009 18:47

PHP код:

$news=mysql_query('select *  from  `table` where id = "' $id '" ')
or die (
mysql_error());
$a mysql_fetch_assoc($news);
$id=$a['id'];
$massiv=explode(',',$id);
for(
$i=0;$i<=count($massiv);$i++){
echo 
$massiv[$i].'<br>';



restart_05 19.08.2009 18:51

спс

KaZ@NoVa 19.08.2009 18:59

Я бы хранил в отдельной табличке список вида [id_юзера,id_друга] и потом выборка из этой таблички при подготовке данных с лимитом необходимым. Суть в том, чтобы обрабатывать последовательно id френдов и добавлять к выводу/выводить результаты выборки.

VDShark 19.08.2009 19:01

Нахство вы выдумываете ребята. Сразу видно что нормальной практики явно не хватает :)
2 restart_05:
Создавай такую таблицу:

Код:

user_ud | friend_id
Где один кортеж (строка) - один друг.
Т.е. допустим у человека 10 друзей - это будет 10 кортежей.
Так же эти поля будут внешними ключами на таблицу с юзерами.

Вышеприведенный в данном топике вариант имеет кучу недостатков, таких как аномалия удаления, вставки, изменения и тд и тп. Так же при такой структуре ни о какой согласованности в БД не может быть и речи.

Со структурой, которую предложил я - легко работать. Делаешь элементарные запросы на выборку, вставку, удаление и тп, и спишь спокойно.

qBiN 20.08.2009 03:20

Цитата:

Я бы хранил в отдельной табличке список вида [id_юзера,id_друга] и потом выборка из этой таблички при подготовке данных с лимитом необходимым. Суть в том, чтобы обрабатывать последовательно id френдов и добавлять к выводу/выводить результаты выборки.
Цитата:

Нахство вы выдумываете ребята. Сразу видно что нормальной практики явно не хватает
До тебя это описали,разницы никакой нет.
Цитата:

Вышеприведенный в данном топике вариант имеет кучу недостатков, таких как аномалия удаления, вставки, изменения и тд и тп. Так же при такой структуре ни о какой согласованности в БД не может быть и речи.
А вот первый вариант несмотря на неудобство работы с ним, может оказаться быстрее, когда таблица разрастется.

VDShark 20.08.2009 10:09

Цитата:

Сообщение от qBiN
До тебя это описали,разницы никакой нет.

Разницу во времени видим? Это написали в то время, когда я писал свой пост
Цитата:

Сообщение от qBiN
А вот первый вариант несмотря на неудобство работы с ним, может оказаться быстрее, когда таблица разрастется.

Я б тебя не взял на работу :) Представь ситуацию когда тебе надо удалить друга? Или акк друга удален, а тут он остался? (ни о каких ограничениях типа внешний ключ и тп при этой схеме не представляется возможным использовать).
И с какого перепуга ты взял что оно будет быстрее работать? Из за меньшего количества кортежей? Смешно =) Это раз. А два - в том примере как я предложил это будут сплошные индексы... Выводы напрашиваются?
Так же представь себе другой тип запроса. Например найти всех людей, у которых ты находишься в друзьях... представляешь как извращаться придется? То то же. Так что это вообще нежизнеспособно в мало мальски серьезном проекте.

qBiN 20.08.2009 13:38

Цитата:

Я б тебя не взял на работу
Очень рад за тебя.
Цитата:

Представь ситуацию когда тебе надо удалить друга?
Разучились со строками работать? А типа неудобно и прочее - так простой класс написать.
Цитата:

Или акк друга удален, а тут он остался?
cron + cleanup скриптик.
Цитата:

И с какого перепуга ты взял что оно будет быстрее работать? Из за меньшего количества кортежей?
выборка твоих друзей будет быстрее, это однозначно, а вот выборка у кого ты в друзьях будет намного медленее.
Цитата:

Смешно =)
я смотрю ты крутой дядька.
Цитата:

Например найти всех людей, у которых ты находишься в друзьях... представляешь как извращаться придется?
Ну да, об этом я уже написал.
Цитата:

Так что это вообще нежизнеспособно в мало мальски серьезном проекте.
Несогласен.( в данном премере конечно лучше не использовать этот вариант)
Например в ситуации когда числа описывают какие-то настройки у пользователя(типа вкл,выкл) тогда наврятли тебе понадобится выбирать всех юзверей у кого включена та или иная опция,поэтому уместно использовать. Если создавать еще одну таблицу с опциями то количество запросов к базе увеличится,сама база разрастется, а твой проект загнется от 10к народу(представляешь сколько настроек может быть у одного пользователя?)))
Цитата:

Разницу во времени видим? Это написали в то время, когда я писал свой пост
А теперь модераторов уже не учат за постами следить?


Время: 18:11