Автор Тема: Select из нескольких таблиц  (Прочитано 2519 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн Covex

  • Только встал и уже устал.
  • Постоялец
  • ***
  • Сообщений: 208
  • +0/-0
  • 2
    • Просмотр профиля
Select из нескольких таблиц
« : 15 Августа 2003, 14:27:28 »
Hi all!
Есть запрос:
$quer="SELECT * FROM covex_subj, covex_men, covex_toopen, covex_tests WHERE covex_subj.subj_id=covex_toopen.subj_id and covex_men.id=covex_toopen.men_id and covex_tests.subj_id=covex_subj.subj_id and covex_men.id=\'$men_idi\' ORDER BY covex_subj.subj_id";

Результаты, какие  хотелось бы получить: Список предметов и соответствующие им тесты, если есть, или просто предметы без тестов.
По жизни возвращаются только те записи где covex_tests содержит запись, т.е. возвращает список предметов у которых есть тесты, предметы без тестов не возвращаются.
Как это можно победить.
таблицы:

# Table structure for table \'covex_men\'
#информация про пользователей

CREATE TABLE covex_men (
   id smallint(4) NOT NULL auto_increment,
   passw varchar(7) NOT NULL,
   name varchar(50) NOT NULL,
   expire date DEFAULT \'0000-00-00\' NOT NULL,
   level char(2) DEFAULT \'0\',
   email varchar(60) NOT NULL,
   PRIMARY KEY (id),
   UNIQUE passw (passw),
   UNIQUE id (id, passw),
   KEY id_2 (id)
);

# Table structure for table \'covex_tests\'
#информация про тесты

CREATE TABLE covex_tests (
   id smallint(5) unsigned NOT NULL auto_increment,
   subj_id smallint(5) unsigned DEFAULT \'0\' NOT NULL,
   file_names char(10) NOT NULL,
   PRIMARY KEY (id),
   UNIQUE id (id),
   UNIQUE file_names (file_names),
   KEY id_2 (id)
);

#информация про предметы
CREATE TABLE covex_subj (
   subj_id smallint(5) unsigned NOT NULL auto_increment,
   subj_name varchar(100) NOT NULL,
   PRIMARY KEY (subj_id),
   UNIQUE subj_id (subj_id, subj_name),
   KEY subj_id_2 (subj_id)
);



# Table structure for table \'covex_toopen\'
#информация что из предметов кому доступно в колонке tests  информация о  уже пройденных тестах

CREATE TABLE covex_toopen (
   id tinyint(4) NOT NULL auto_increment,
   men_id tinyint(4) DEFAULT \'0\' NOT NULL,
   subj_id tinyint(4) DEFAULT \'0\' NOT NULL,
   tests varchar(160) NOT NULL,
   PRIMARY KEY (id),
   UNIQUE id (id),
   KEY id_2 (id)
);
« Последнее редактирование: 15 Августа 2003, 15:38:50 от Covex »

Оффлайн fidget

  • Непоседа
  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 607
  • +0/-0
  • 2
    • Просмотр профиля
    • http://
Select из нескольких таблиц
« Ответ #1 : 15 Августа 2003, 15:06:12 »
тебе нужно делать LEFT JOIN предметов на тесты, тогда если тестов для данного предмета нет, то будет NULL выводить.
На Машине Тьюринга далеко не уедешь.

Оффлайн Covex

  • Только встал и уже устал.
  • Постоялец
  • ***
  • Сообщений: 208
  • +0/-0
  • 2
    • Просмотр профиля
Select из нескольких таблиц
« Ответ #2 : 15 Августа 2003, 15:38:03 »
Спасибо за суппорт!
Вот как я его нарисовал:
$quer="SELECT * FROM covex_toopen, covex_men, covex_subj LEFT JOIN covex_tests ON covex_subj.subj_id = covex_tests.subj_id WHERE covex_subj.subj_id = covex_toopen.subj_id and covex_men.id = covex_toopen.men_id and covex_men.id = \'$men_idi\' ORDER BY covex_subj.subj_id";
Вроде корректно отвечает...

 

Sitemap 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28