PHP и SQL Социальные операции - PullRequest
1 голос
/ 23 сентября 2010

У меня есть таблица, созданная с помощью этого запроса.

CREATE TABLE `tbl_friends` (
  `friend_id` int(11) NOT NULL auto_increment,
  `friend_status` tinyint(4) NOT NULL default '0',
  `friend_id1` int(11) NOT NULL default '0',
  `friend_id2` int(11) NOT NULL default '0',
  `friend_date` datetime NOT NULL default '0000-00-00 00:00:00',
  `friend_confirm` datetime NOT NULL default '0000-00-00 00:00:00',
  PRIMARY KEY  (`friend_id`)
) TYPE=MyISAM AUTO_INCREMENT=10 ;

Я хочу просмотреть список своих друзей, для этого мне нужно только знать другого пользователя id - числовое значение, хранящееся в friend_id1 или friend_id2 строк , Моя проблема в том, что я не знаю, содержит ли friend_id1 или friend_id2 необходимые данные.

Пожалуйста, помогите мне создать запрос, чтобы получить номер другого пользователя, если мой номер $ _ SESSION ['id']

Ответы [ 3 ]

2 голосов
/ 23 сентября 2010
CREATE TABLE `tbl_friends` (
  `friend_id` int(11) NOT NULL auto_increment,
  `friend_status` tinyint(4) NOT NULL default '0',
  `friend_id1` int(11) NOT NULL default '0',
  `friend_id2` int(11) NOT NULL default '0',
  `friend_date` datetime NOT NULL default '0000-00-00 00:00:00',
  `friend_confirm` datetime NOT NULL default '0000-00-00 00:00:00',
  PRIMARY KEY  (`friend_id`)
) TYPE=MyISAM AUTO_INCREMENT=10 ;

Было бы так:

SELECT * FROM tbl_friends WHERE friend_id2 = %d OR friend_id1 = %d AND friend_status != 0 ORDER BY friend_id

Больше Визуальный пример:

SELECT
    *
FROM
    tbl_friends
    WHERE
        friend_id2 = %$1d
    OR
        friend_id1 = %$1d
    AND
        friend_status != 0
    ORDER BY
        friend_id
    DESC

Затем просто запустите его, бросил функцию sprintf и вы готовы.

$sql = sprintf($sql,$_SESSION['id']);
2 голосов
/ 23 сентября 2010

Я не уверен, что именно вы имеете в виду, но я думаю, что вы ищете что-то вроде:

select distinct * from tbl_friends where friend_id1 = $_SESSION["id"] OR friend_id2 = $_SESSION["id"];

Если вы не это имеете в виду, добавьте дополнительную информацию.

1 голос
/ 23 сентября 2010

Что-то вроде:

 Select distinct(id) from (
      select friend_id1 as id from friends where friend_id2 = :my_id
      union
      select friend_id2 as id from friends where friend_id1 = :my_id
 )

Здесь реальная проблема - удержание таблицы от получения странных данных.Вам лучше всегда помещать две записи в таблицу для каждого взаимного отношения.Тогда вам нужно только сказать:

select * from friends where friend_id1 = :my_id and status = :whatever 

Если вы сделаете это таким образом, контрольные данные о том, когда случится дружба, возможно, придется перенести в другую таблицу

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...