2013-04-17 2 views
1

У меня есть сайт, на котором печатаются все зарегистрированные пользователи. запрос работал нормально, пока я не захотел добавить значение из другой таблицы. теперь распечатывает дублированные значения.Query echo duplicated values ​​при выборе двух таблиц

позволяет сказать, что у меня 2 пользователя. он должен распечатать

John Doe Джейн Доу

Но после добавления таблицы с аватара он печатает John Doe Джейн Доу Джон Доу Джейн Доу

Это мой запрос.

<?php 
function fetch_users(){ 
global $db; 
$query = $db->query("SELECT user.id, user.username,user.email, userdetails.profile_img FROM user , userdetails"); 
$user = array(); 
while(($row = $query->fetch(PDO::FETCH_ASSOC)) !==FALSE) { 
$user[] = $row; 
} 
return $user; 
} 
?> 

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

php.

<?php foreach(fetch_users() as $user){ ?> 
<p> 
<a href="profile.php?uid=<?php echo $user['id'];?>"><?php echo $user['username'];?> </a> 
</p> 
<?php 
    } 
    ?> 
+0

вы видите декартово произведение таблиц, потому что вы присоединяетесь таблицы без conditi на. Попробуйте указать 'WHERE' caluse – Ejaz

ответ

1

Вы можете посмотреть в MySQL joins.

Например, вы могли бы сделать что-то вроде следующего:

SELECT user.id, user.username, user.email, userdetails.profile_img 
FROM user 
LEFT JOIN userdetails 
ON user.id = userdetails.<user id column name goes here> 
GROUP BY user.id 

Это предполагает, что вы (вы должны обязательно иметь, если вы не 't) столбца в таблице userdetails, которая содержит ключи для ссылки на таблицу пользователя по id.

+0

Спасибо, это сработало как шарм, не был уверен, действительно ли мне нужно левое соединение, но теперь я понимаю, почему. Спасибо мастер @Leng – Dymond

+0

@Dymond Glad Я мог бы помочь. :) – Leng

1
SELECT user.id, user.username,user.email, userdetails.profile_img FROM user , userdetails 

Этот запрос выбирает один раз для каждого пользователя и таблицы всего UserDetails (Джон Доу + Джон Доу | John Doe + Джейн Доу | Джейн Доу + Джон Доу | Джейн Доу + Джейн Доу = 4 строк)

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

SELECT user.id, user.username,user.email, userdetails.profile_img FROM user , userdetails WHERE user.id = userdetails.id 

(если предположить, что у вас есть в обеих таблицах идентификатор пользователя)

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