2012-06-02 4 views
0

У меня есть таблица mysql, где я отслеживаю участников и их друзей, а внутри этой таблицы у меня есть поле под названием «друзья». Поэтому, если член frends запрашивает другой член, поле обновляется как с их соответствующими идентификаторами.Вставка массивов в mysql

Например: если член с id: 125 друзей запрашивает участника с идентификатором: 10, то я вставляю в поле 10, 125 для членов 125 и 125, 10 для члена 10., чтобы лучше объяснить здесь мой код.

Проблема заключается в том, что если у пользователя нет предыдущих друзей, запрос все еще обновляет поле друзей и вставляет «Array, 125» вместо вставки «10, 25».

$friends = ''; 

$friendArray = explode(",", $friendArray); 
$friendCount = count($friendArray); 

if($friendArray != "" && !is_null($friendArray)) 
{ 
    $sum = '<h1> '.$friendArray.'\'s friends('.$friendCount.') </h1>'; 
} 

но количество переменных выходов 1 вместо 0! и это поле NULL.

ответ

2

Это звучит как плохой дизайн для меня. Это нарушает нормальную форму. Вы не должны разбирать эту колонку, чтобы узнать отношения.

Лучшим решением является использование внешних ключей. У человека может быть много друзей, поэтому постройте отношения 1: m в своей схеме.

2

Не делайте этого. Это не реляционная настройка БД - это скорее настройка типа MongoDB. Для MySQL создайте таблицу «друзей» и просто создайте карты данных.

+----+-------------+-------------------+ 
| ID | User_ID  | Friend_ID   | 
+----+-------------+-------------------+ 
| 1 | 102   | 213    | 
| 2 | 64   | 23    | 
| 3 | 4   | 344    | 
| 4 | 102   | 2     | 
| 5 | 102   | 90    | 
| 6 | 64   | 88    | 
+----+-------------+-------------------+ 

Это предполагает, что это взаимная дружба. Друг A не может дружить с Friend B, если Friend B не хочет дружить с Friend A.

+0

Итак, вы имеете в виду это, а затем выберите * из друзей, где user_id = '102'); – lomas09

+0

Вы хотите искать оба поля, если кто-то еще добавил пользователя 102 в качестве друга, а пользователь 102 только принял запрос, но не инициировал его. Это означало бы, что 102 будет в столбце Friend_ID. Что-то вроде этого должно работать: 'SELECT DISTINCT CONCAT (User_ID, Friend_ID) AS user FROM Friends WHERE user = 102' – AlienWebguy

Смежные вопросы