Задавайте вопросы, мы ответим
Вы не зашли.
Такая проблема:
как такой запрос написать правильно:
$database->setQuery("SELECT * FROM users");
$list = $database->loadObjectList();
foreach($list as $var)
{
$database->setQuery("SELECT * FROM links WHERE id='{$var->userid}'");
$list = $database->loadObjectList();
foreach($list as $var2)
{
$database->setQuery("SELECT * FROM posts WHERE id='{$var2->postid}'");
$list = $database->loadObjectList();
foreach($list as $var3)
echo $var->user.' '.$var3->post;
}
}
Таблицы:
users - пользователи, колонки: id (auto increment), user - имя пользователя, postid - id должности.
posts - должности, колонки: id (auto increment), post - название должности.
links - связи, колонки userid - id пользователя, postid - id пользователя.
Если например 100 пользователей то будет 100 запросов к базе post и 100 запросов к базе links.
И правильно ли я создал таблицу links? Она нужна изза того что у одного пользователя должна быть возможность добавления неограниченного количества должностей.
Неактивен
Примерно так:
$database->setQuery( "SELECT `users`.`user`,`posts`.`post` FROM `users` JOIN `links` ON `links`.`userid`=`users`.`id` JOIN `posts` ON `posts`.`id`=`links`.`postid`"); $list = $database->loadObjectList(); foreach($list as $var) echo "{$var->user} {$var->post}\n";
Поле `postid` в таблице `users` вроде как лишнее.
Отредактированно coin (18.02.2009 17:08:33)
Неактивен
Супер! работает, но только оно отображает только одну должность, а нужно чтоб должностей было не ограничено
Неактивен
Должно выбирать всех пользователей в паре с соответствующими должностями. Если в таблице links одна запись для конкретного пользователя, значит он втретится в этой выборке только один раз, если 10, значит 10..
Неактивен
Можно сгруппировать, чтобы каждый пользователь входил в выборку только один раз со своим списком:
$database->setQuery( "SELECT `users`.`user`,GROUP_CONCAT(`posts`.`post`) `posts` FROM `users` JOIN `links` ON `links`.`userid`=`users`.`id` JOIN `posts` ON `posts`.`id`=`links`.`postid` GROUP BY `users`.`id`"); $list = $database->loadObjectList(); foreach($list as $var) echo "{$var->user} {$var->posts}\n";
Неактивен
Разобрался, спасибо ОГРОМНОЕ
Неактивен
Подскажите плз еще что тут не правильно?
"SELECT * FROM posts, users JOIN links ON links.wpid='{$wpid}'
AND links.userid=users.id AND users.postid = posts.id");
Мне нужно чтоб из базы links выбирались пользователи с заданным wpid и сопоставлялись с базой users и одновременно для каждого postid в таблице users подбирался id из таблицы posts
Неактивен
Лучше объединения писать или через запятую, или через JOIN. Иначе очень тяжело понять
логику выражения.
SELECT * FROM post, users, links
WHERE ...
Неактивен
Тоесть через AND?
SELECT * FROM post, users, links
WHERE links.wpid='{$wpid}' AND links.userid=users.id AND users.postid=posts.id ?
И как отобразить запись если в поле post.id - 0?
Неактивен
Я пробовал через логическую или но чето не работает -
SELECT * FROM post, users, links
WHERE links.wpid='{$wpid}' AND links.userid=users.id AND users.postid=posts.id||0
Неактивен
Честно говоря, не понял вопроса.
WHERE ... AND ((users.postid = posts.id) OR (users.postid = 0))
Вот это Вы имели в виду?
Неактивен