2013-05-27 2 views
0

Я следующие таблицы MySQL, которые, вероятно, связаны с этим запросом:Пытаясь выяснить, что запрос MySQL делает (не мое)

Table: user_follow 
Columns: | Type: 
-----------|--------- 
id   | INT(11) 
follower | INT(11) 
user  | INT(11) 
subscribed | INT(11) 

Идентификатор является идентификатором последующих, последователь является человек который следит за пользователем и подписывается, когда они следовали за ними. Последователь и пользователь будет идентификаторы людей в таблице пользователей:

Table: users 
Columns: | Type: 
----------|--------- 
id  | INT(11) 
username | INT(11) 

Это не полная таблица пользователей, но это должно быть достаточно для любой этот запрос MySQL делает. Идентификатор в таблице пользователей - это идентификатор пользователя, а имя пользователя - это имя пользователя. Итак, вот запрос, который я пытаюсь выяснить, что он делает. Я считаю, что он пытается получить имя пользователя из базы данных пользователя:

SELECT `ufollower`.`id` AS follower_id, `ufollower`.`username` AS follower_name, 
    `ufollowed`.`id` AS user_id, `ufollowed`.`username` AS user_name 
FROM `user_follow` 
JOIN users ufollower ON `ufollower`.`id` = `user_follow`.`follower` 
JOIN users ufollowed ON `ufollowed`.`id` = `user_follow`.`user` 
WHERE `user_follow`.`user` = :p_id 

Полный код, который я пытаюсь запустить, это (включает в себя запрос):

//Get people who this person is following 
$following = $db->prepare("SELECT `ufollower`.`id` AS follower_id, `ufollower`.`username` AS follower_name, `ufollowed`.`id` AS user_id, `ufollowed`.`username` AS user_name FROM `user_follow` JOIN users ufollower ON `ufollower`.`id` = `user_follow`.`follower` JOIN users ufollowed ON `ufollowed`.`id` = `user_follow`.`user` WHERE `user_follow`.`user` = :p_id"); 
$following->bindValue(":p_id",$p_id,PDO::PARAM_STR); 
$following->execute(); 
$following = $following->fetchAll(PDO::FETCH_ASSOC); 
var_dump($following); 

//If I do $following = $following->fetch(); and var_dump that, it returns "bool(false)" which I learned the other day that it couldn't do the query or there were no results found or something 

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

+0

Да, получение логической ложной верстки из операции выборки означает, что больше нет (или никогда не было) данных, доступных для выборки. –

+0

Да, это кажется правильным. По-видимому, этот запрос выглядит так, как будто кто-то следит за человеком, а не за тем, за кем человек следит. – TheNytangel

+0

Нечего делать, но когда вы связываете ID (целое число), используйте вместо этого флаг 'PDO :: PARAM_INT' – antoox

ответ

1

В основном таблица user_follow соединяет двух других пользователей, которые следуют за другим, и этот запрос получает этих двух пользователей для одного конкретного следующего.

объяснил этот запрос может быть описан как:
Для user_follow с: ID получить один пользователь (ufollower), который следует за другой пользователь (ufollowing) и их идентификатор и имена пользователей.

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