Получение массива данных mysql с использованием данных из другой таблицы - PullRequest
0 голосов
/ 18 мая 2011

таблица пользователей

  • (ИД пользователя)
  • (имя пользователя)
  • (пароль)
  • (электронная почта) и т. Д. *

Таблица сообщений

  • (authorID)
  • (postdata)

таблица подключений

  • (userID)
  • (friendID)

Я хочу получать только данные постов, используя subscription.friendID в качестве posts.authorID, если subscription.userID является user.userID.

Это немного смущает меня, надеюсь, кто-то может мне помочь.Это то, что у меня есть, но я тоже получаю данные о подписке.Я хочу только опубликовать данные таблицы.

 mysql_query("SELECT posts.*, connections.userID, connections.subID FROM posts, connections
        WHERE posts.userID = '$userid' AND posts.userID = connections.subID");

Ответы [ 2 ]

0 голосов
/ 18 мая 2011

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

На основании того, что вы здесь написали, я думаю васВы ищете что-то вроде «получить все сообщения от друзей какого-то пользователя» - а это будет:

     SELECT p.authorID, p.postdata
       FROM posts p
 INNER JOIN subscriptions s ON s.friendID = p.authorID    
      WHERE s.userID = '$userid'

Эта функциональность будет похожа на функцию стены на Facebook.

Если вам нужноБолее подробную информацию о пользователе, такую ​​как имя пользователя, вы также можете присоединить к пользовательской таблице.

0 голосов
/ 18 мая 2011

Если вам нужны только данные публикации, сделайте следующее:

mysql_query("SELECT posts.* FROM posts, connections
        WHERE posts.userID = '$userid' AND posts.userID = connections.subID");

В качестве лишнего примечания, если вообще возможно, что $ userid предоставляется пользователем (через форму HTML,например), обязательно запустите его через mysql_real_escape_string (), прежде чем помещать в запрос.В противном случае вы будете уязвимы для атаки SQL-инъекцией.Еще лучше было бы использовать подготовленное заявление через PDO или что-то в этом роде.

...