Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
Объектно-ориентированное программирование на PHP. Авторы: Кузнецов М.В., Симдянов И.В. MySQL на примерах. Авторы: Кузнецов М.В., Симдянов И.В. Программирование. Ступени успешной карьеры. Авторы: Кузнецов М.В., Симдянов И.В. PHP 5/6. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. PHP Puzzles. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум MySQL

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Выборка записей
 
 автор: Pegas   (23.06.2005 в 20:42)   письмо автору
 
 

Доброго времени!
У меня такая проблема, есть БД вида id_user -> 1,1,1,2,1,3,1.......
Так вот надо выбрать записи так что бы отсеять повторы, т.е. 1,2,3...
при этом идет объединение таблиц по этому полю.
Как это сделать?

   
 
 автор: cheops   (24.06.2005 в 01:41)   письмо автору
 
   для: 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

   
 
 автор: pegas   (24.06.2005 в 12:34)   письмо автору
 
   для: 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>";

   
 
 автор: cheops   (24.06.2005 в 22:31)   письмо автору
 
   для: 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";

   
 
 автор: pegas   (25.06.2005 в 21:19)   письмо автору
 
   для: cheops   (24.06.2005 в 22:31)
 

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

   
 
 автор: cheops   (26.06.2005 в 00:38)   письмо автору
 
   для: pegas   (25.06.2005 в 21:19)
 

А каково назначение таблицы diary и остальных? Может разумнее в конструкции GROUP BY заменить diary.id_user на users.id_user? Без структуры таблиц и сведений об их содержимом трудно составить корректный запрос...

   
 
 автор: pegas   (28.06.2005 в 21:08)   письмо автору
 
   для: 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 - их настройки

   
 
 автор: cheops   (28.06.2005 в 22:21)   письмо автору
 
   для: 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";

Этот запрос срабатывает или нет?

   
 
 автор: pegas   (29.06.2005 в 22:17)   письмо автору
 
   для: cheops   (28.06.2005 в 22:21)
 

нет этот запрос не срабатывает, он как и предыдущие выдает одну запись, первую по полю users.id_user
А нужно мне действительно - cписок уникальных ключей id_user

   
 
 автор: cheops   (30.06.2005 в 12:51)   письмо автору
 
   для: 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";

   
 
 автор: pegas   (30.06.2005 в 21:55)   письмо автору
 
   для: cheops   (30.06.2005 в 12:51)
 

блин, невыходит.
что хоть делать?
Из-за чего это может не работать?

   
 
 автор: cheops   (01.07.2005 в 01:09)   письмо автору
 
   для: pegas   (30.06.2005 в 21:55)
 

Хм... мне сложно судить, так как у меня нет таблиц и я предлагаю решения наугад - вам обязательно делать это в один запрос? Может выбрать данные несколькими запросами? Сделать однотабличный запрос в цикле выполнить двутабличные запросы?

   
 
 автор: pegas   (01.07.2005 в 21:55)   письмо автору
 
   для: cheops   (01.07.2005 в 01:09)
 

и как это можно осуществить?

   
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования