|
|
|
| Доброго времени!
У меня такая проблема, есть БД вида id_user -> 1,1,1,2,1,3,1.......
Так вот надо выбрать записи так что бы отсеять повторы, т.е. 1,2,3...
при этом идет объединение таблиц по этому полю.
Как это сделать? | |
|
|
|
|
|
|
|
для: Pegas
(23.06.2005 в 20:42)
| | Это можно сделать двумя способами, либо с использованием ключевого слова DISTINCT
SELECT DISTINCT id_user FROM tbl
|
либо с группировкой по полю id_user
SELECT id_user FROM tbl GROUP BY id_user
|
>при этом идет объединение таблиц по этому полю.
Подробнее плиз, что за объединение, перекрёстное или левое, сколько таблиц - хорошо бы если вы привели тот запрос, который у вас сейчас имеется.
http://www.softtime.ru/forum/read.php?id_forum=3&id_theme=4908 | |
|
|
|
|
|
|
|
для: cheops
(24.06.2005 в 01:41)
| | Запрос следующенго вида:
$query = "SELECT diary.id_user, diary.id_diary, diary.hide, users.id_user, users.name, users.country, users.city, settings_users.id_user, settings_users.name_diary
FROM diary, users, settings_users
WHERE diary.hide != 'yes'
AND users.id_user = settings_users.id_user;";
|
Надо выдать поля:
$mfa = @mysql_fetch_array ($query);
echo "<tr align=\"left\" valign=\"top\">
<td>".$mfa['name']."</td>
<td>".$mfa['name_diary']."</td>
<td>".$mfa['country']."</td>
<td>".$mfa['city']."</td>
</tr>";
|
| |
|
|
|
|
|
|
|
для: pegas
(24.06.2005 в 12:34)
| | Хм... попробуйте что-нибудь вроде этого
$query = "SELECT diary.id_user, diary.id_diary, diary.hide, users.id_user, users.name, users.country, users.city, settings_users.id_user, settings_users.name_diary
FROM diary, users, settings_users
WHERE diary.hide != 'yes'
AND users.id_user = settings_users.id_user
GROUP BY diary.id_user";
|
| |
|
|
|
|
|
|
|
для: cheops
(24.06.2005 в 22:31)
| | нет так я уже пробовал, ни чего не выходит.
Выдает только одну запись, причем первую по списку в таблице users. | |
|
|
|
|
|
|
|
для: pegas
(25.06.2005 в 21:19)
| | А каково назначение таблицы diary и остальных? Может разумнее в конструкции GROUP BY заменить diary.id_user на users.id_user? Без структуры таблиц и сведений об их содержимом трудно составить корректный запрос... | |
|
|
|
|
|
|
|
для: cheops
(26.06.2005 в 00:38)
| | нет с GROUP BY ... я уже все перепробовал...
вот листинг таблиц:
diary
id_diary int(11) NOT NULL auto_increment,
id_user int(8) NOT NULL,
heading tinytext NOT NULL,
record text NOT NULL,
images tinytext NOT NULL,
answer enum('yes','no') NOT NULL default 'no',
hide enum('yes','no') NOT NULL default 'no',
chosen enum('yes','no') NOT NULL default 'no',
diary_date datetime NOT NULL default '0000-00-00 00:00:00',
PRIMARY KEY (id_diary)
|
users
id_user int(16) NOT NULL auto_increment,
name varchar(50) NOT NULL,
pass varchar(50) NOT NULL,
rname varchar(50) NOT NULL,
surname varchar(50) NOT NULL,
country varchar(50) NOT NULL,
city varchar(50) NOT NULL,
email tinytext NOT NULL,
url tinytext NOT NULL,
icq varchar(12) NOT NULL,
about mediumtext NOT NULL,
photo tinytext NOT NULL,
reg_date datetime NOT NULL default '0000-00-00 00:00:00',
last_date datetime NOT NULL default '0000-00-00 00:00:00',
PRIMARY KEY (id_user)
|
settings_users
id_user int(16) NOT NULL,
name_diary tinytext NOT NULL,
....
|
в diary хранятся записи пользователей
users - пользователи
settings_users - их настройки | |
|
|
|
|
|
|
|
для: pegas
(28.06.2005 в 21:08)
| | По сути требуется осуществить трёх-табличный запрос. А что в результате должно получиться? Список уникальных ключей id_user или ещё чего - какая задача?
Кстати, у нас запрос был неправильный, нужно, что-то в этом духе писать
$query = "SELECT diary.id_user, diary.id_diary, diary.hide, users.id_user, users.name, users.country, users.city, settings_users.id_user, settings_users.name_diary
FROM diary, users, settings_users
WHERE diary.hide != 'yes'
AND users.id_user = settings_users.id_user
AND users.id_user = diary.id_user
GROUP BY users.id_user";
|
Этот запрос срабатывает или нет? | |
|
|
|
|
|
|
|
для: cheops
(28.06.2005 в 22:21)
| | нет этот запрос не срабатывает, он как и предыдущие выдает одну запись, первую по полю users.id_user
А нужно мне действительно - cписок уникальных ключей id_user | |
|
|
|
|
|
|
|
для: pegas
(29.06.2005 в 22:17)
| | Тогда попробуйте левое объединение
$query = "SELECT diary.id_user, diary.id_diary, diary.hide, users.id_user, users.name, users.country, users.city, settings_users.id_user, settings_users.name_diary
FROM users LEFT JOIN diary USING(id_user), settings_users
WHERE diary.hide != 'yes'
AND users.id_user = settings_users.id_user";
|
| |
|
|
|
|
|
|
|
для: cheops
(30.06.2005 в 12:51)
| | блин, невыходит.
что хоть делать?
Из-за чего это может не работать? | |
|
|
|
|
|
|
|
для: pegas
(30.06.2005 в 21:55)
| | Хм... мне сложно судить, так как у меня нет таблиц и я предлагаю решения наугад - вам обязательно делать это в один запрос? Может выбрать данные несколькими запросами? Сделать однотабличный запрос в цикле выполнить двутабличные запросы? | |
|
|
|
|
|
|
|
для: cheops
(01.07.2005 в 01:09)
| | и как это можно осуществить? | |
|
|
|