mysql Выбор из двух разных таблиц.

$sql = "select body, stamp from posts where user_id = '$userid' order by stamp desc"; 

ПРИМЕЧАНИЕ: вышеуказанный запрос работает нормально. Я хочу также выбрать имя пользователя из таблицы моих пользователей и отобразить имя пользователя, соответствующее user_id.

Я отредактировал вышеуказанный оператор так, и он не работает. Может кто-нибудь предложить правильный запрос? Моя цель – также показывать имена пользователей. в дополнение к простому отображению user_id.

 $sql = "select body, stamp from posts AND username from users where user_id = '$userid' order by stamp desc"; 

Моя цель – также показывать имена пользователей. а не просто user_id.

Вам нужно будет использовать JOIN для объединения двух таблиц в соответствующее поле, так что примерно так:

 $sql = "SELECT p.body, p.stamp, u.username FROM posts p INNER JOIN users u ON p.user_id=u.user_id WHERE p.user_id='$userid' ORDER BY p.stamp DESC"; 

Вы можете использовать имя таблицы для выбора столбцов. Пример:

 $Query = "select table1.body, table1.stamp, users.username from posts, users where user_id = '$userid' order by stamp desc"; 

Но этот метод не очень хорош в производительности.

Лучший способ:

 $Query = "SELECT table1.body, table1.stamp, users.username FROM posts INNER/LEFT/RIGHT JOIN users ON users.user_id = '$userid' AND users.user_stamp = stamp.stamp_id 

Все таблицы должны быть связаны.

Приветствую,

 $sql = "select body, stamp from posts , username from users where user_id = '$userid' order by stamp desc"; 

Я только что исправил синтаксическую ошибку в вашем запросе … это ключевое слово AND должно быть заменено на.

 $sql = " select body, stamp from posts where user_id = '$userid' order by stamp desc UNION ALL select body, stamp from username where user_id = '$userid' order by stamp desc "; 

http://dev.mysql.com/doc/refman/5.0/en/union.html

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

 tablename.column 

или

 alias.column 

вы можете установить псевдоним в своем предложении where:

 FROM table as alias_name 
 $sql = "SELECT p.body,p.stamp,u.username from posts p LEFT JOIN users as u ON (p.user_id = u.user_id) WHERE user_id = '$user_id' ORDER BY p.stamp DESC"; 

должен это сделать

Попробуй это:

 select body, stamp, username from posts p JOIN users a ON p.user_id = a.user_id WHERE p.user_id = '$userid' order by stamp desc 

Это должно работать нормально:

 SELECT posts.body, posts.stamp, users.username FROM posts, users WHERE posts.user_id = '$userid' AND posts.user_id = users.user_id ORDER BY posts.stamp DESC 
  select body, stamp, username from posts,users where users.user_id = post.user_id and users.user_id = '$userid' order by stamp desc;