2013-06-01 3 views
1

Я пытался получить друзей для пользователей сеанса. Но у меня ничего не получается, или все это видят все.Получение данных из таблицы buddys, друзей и пользователей

Формат таблицы http://pastebin.com/XGYmpi5u

CREATE TABLE IF NOT EXISTS `users` (
    `user_id` int(11) NOT NULL AUTO_INCREMENT, 
    `username` varchar(32) NOT NULL, 
    `password` varchar(32) NOT NULL, 
    `first_name` varchar(32) NOT NULL, 
    `last_name` varchar(32) NOT NULL, 
    `email` varchar(1024) NOT NULL, 
    `active` int(11) NOT NULL DEFAULT '0', 
    `email_code` varchar(32) NOT NULL, 
    `avatar` varchar(55) NOT NULL, 
    `type` int(1) NOT NULL DEFAULT '0', 
    `protected` int(1) NOT NULL DEFAULT '0', 
    PRIMARY KEY (`user_id`) 
) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=9 ; 

CREATE TABLE IF NOT EXISTS `feeds` (
    `id` int(6) NOT NULL AUTO_INCREMENT, 
    `user_id` int(6) NOT NULL, 
    `username` varchar(32) NOT NULL, 
    `body` text NOT NULL, 
    `date` datetime NOT NULL, 
    PRIMARY KEY (`id`) 
) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=14 ; 

CREATE TABLE IF NOT EXISTS `buddys` (
    `id` int(6) NOT NULL AUTO_INCREMENT, 
    `user_one` int(6) NOT NULL, 
    `user_two` int(6) NOT NULL, 
    PRIMARY KEY (`id`) 
) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=4 ; 

Так что мой вопрос, как я могу получить данные пользователей, и каналы, которые они размещены и Buddys каналы. Где только пользователи, которые знакомы с приятелем, могут видеть только сообщения, которые они сделали никому другому.

Я попытался код:

$user_id = $_SESSION['user_id']; 
    if ($getquery = mysql_query("SELECT * FROM feeds f 
    INNER JOIN users u ON u.user_id = f.user_id 
    WHERE u.user_id = '$user_id' OR u.user_id IN 
    (SELECT b.user_one OR b.user_two FROM buddys b 
    WHERE b.user_one OR b.user_two = '$user_id')")){ 

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

Таблица пользователей и кормов имеет похожие столбцы.

+---+----------+ 
| ID | user_id | 
+---+----------+ 

Хотя Buddys имеет

+----+----------+----------+ 
| ID | user_one | user_two | 
+----+----------+----------+ 

Если таблицы имеют поля установлены как

+----+----------+---------+ 
| ID | user_one | user_two| 
+----+----------+---------+ 
| 1 | 3  | 5  | 
+----+----------+---------+ 

я хотел схватить его моим ID, если это 3 и получить каналы от пользователя ID 5.

Btw, я ищу, чтобы он был таким, как у Facebook/Twitter.

+0

вы также можете разместить некоторые примеры записей и нужный результат в табличном формате? –

+0

Не знаете, что вы подразумеваете под «результатом» –

+0

[Увидите этот вопрос, чтобы понять, что я имею в виду под * образцами записей с желаемым результатом *] (http://stackoverflow.com/questions/15656273/mysql-pivot-table-column- data-as-rows/15656384) –

ответ

0

Честно говоря, я не читал все ваши вопросы, но ...

ваш подзапрос здесь:

... OR u.user_id IN 
    (SELECT b.user_one OR b.user_two FROM buddys b 
    WHERE b.user_one OR b.user_two = '$user_id') 

Вы не можете написать это, как это. b.user_one OR b.user_two фактически становится булевым выражением, где 0 является ложным, а все остальное - истинным. Таким образом, ваш запрос в основном

... OR u.user_id IN 
    (0, 1) 

Вы должны использовать UNION, чтобы обе колонки в одно целое.

... OR u.user_id IN 
    (SELECT b.user_one FROM buddys b 
    WHERE b.user_one = '$user_id' 
    UNION 
    SELECT b.user_two FROM buddys b 
    WHERE b.user_two = '$user_id' 
    ) 

Надеюсь, что эта проблема уже решена. Если нет, дайте мне быструю обратную связь, и я прочитаю весь вопрос :)

+0

Все еще не работает. Теперь я использую $ my_id = $ _SESSION ['user_id']; \t \t \t если ($ GetQuery = mysql_query ("SELECT * FROM кормах е \t \t \t LEFT JOIN пользователей Мириэль u.user_id = f.user_id \t \t \t WHERE u.user_id = '$ my_id' OR и.идентификатор_пользователя В \t \t \t \t (SELECT b.user_one FROM Buddys б \t \t \t \t ГДЕ b.user_one = '$ my_id' \t \t \t \t \t СОЕДИНЕНИЕ \t \t \t ВЫБОР b.user_two ОТ Buddys б \t \t \t \t WHERE b.user_two = '$ my_id' \t \t) ")) { –

+0

Как и другие, уже прокомментированные, очень сложно понять, что вам нужно. Поэтому я присоединяюсь к ним, запрашивая образцы данных и желаемый результат на основе данных образца. – fancyPants

+0

Упростили это в этой теме. http://stackoverflow.com/questions/16888692/friends-system-connected-to-news-feeds –

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