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

Форум MySQL

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

 

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

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

тема: Сложный запрос в БД
 
 автор: vladimir_sumy   (09.09.2005 в 12:02)
8.1 Кб
 
 

Есть две таблицы:

 TABLE doi_item
(
  doi_item_id int(8) NOT NULL
  item_id int(8) NOT NULL
  doi varchar(400) NOT NULL
  type varchar(30) NOT NULL
  PRIMARY KEY  (doi_item_id)
  FOREIGN KEY  (item_id)
)
 
TABLE item
(
  item_id int(8) NOT NULL
  ISBN varchar(13) NOT NULL
  title varchar(100) NOT NULL
  author varchar(100)
  subject varchar(20)
  format varchar(30)
  media_class varchar(30)
  publisher varchar(100)
  audience varchar(30)
  PRIMARY KEY  (item_id)
)


По ним ведётся поиск. Есть 4 варианта поиска - По автору(таблица item), названию(таблица item), ИСБН(таблица item) и ДОИ(таблица doi_item).
Выводятся данные в виде
N Title Author ISBN TYPE DOI
1 Interesting Book Olga Dvinyaninova 1234567890 Image 10.1009/1234567
10.1009/12345671

Причём в столбике ДОИ может быть не одна запись. И тогда все ДОИ выводятся в этой же ячейке таблицы. По все молям кроме ДОИ я разобрался как делать поиск..
Я сначла ищу в таблице Item потом в цикле когда пишу данные в таблицу, то создаю запрос в таблице doi_item по полю item_id. Дальше вывести их не сложно.
Вопрос вот в чём: как сделать поиск по ДОИ?. Т. е. ктото ввёл 12345.... и как мне вывести таблицу как я показал выше....(смотрите принтскрин как это должно работать)

   
 
 автор: napTu3aH   (09.09.2005 в 13:10)   письмо автору
 
   для: vladimir_sumy   (09.09.2005 в 12:02)
 

Попробуйте выполнить этот запрос


SELECT item.item_id AS id, 
       item.title AS title
       item.author AS author
       item.ISBN AS ISBN
       doi_item.doi AS DOI
FROM item, doi_item
WHERE doi_item.doi = '$DOI' AND 
      doi_item.item_id = item.item_id


где $DOI это тот Дои что вы хотите найти

   
 
 автор: vladimir_sumy   (09.09.2005 в 13:17)
 
   для: napTu3aH   (09.09.2005 в 13:10)
 

Спасибо за ответ, но как теперь мне заполнить таблицу данными.. Мне не просто заполнить таблицу, а так, как показано на картинке! В этом то вся и сложность.

   
 
 автор: vladimir_sumy   (09.09.2005 в 13:24)
 
   для: vladimir_sumy   (09.09.2005 в 13:17)
 

Допустим пользователь ввёл 33 в поле ДОИ. Вот на картинке пример того, что выдала БД. А как получить только первую строку?Как схитрить?) У каждого поля есть уникальный идентификатор это item_id. Если бы можно было получить строку с минимальным значением. Видимо просто задачку такую не решить....

   
 
 автор: cheops   (09.09.2005 в 14:32)   письмо автору
 
   для: vladimir_sumy   (09.09.2005 в 13:24)
 

Для этого предназначена конструкция GROUP BY
SELECT item.item_id AS id, 
       item.title AS title 
       item.author AS author 
       item.ISBN AS ISBN 
       doi_item.doi AS DOI 
FROM item, doi_item 
WHERE doi_item.doi = '$DOI' AND 
      doi_item.item_id = item.item_id
GROUP BY id

   
 
 автор: vladimir_sumy   (09.09.2005 в 14:45)
 
   для: cheops   (09.09.2005 в 14:32)
 

Вы не поняли сути вопроса. Когда я ищу по автору, названию и ИСБН, то получию результаты и после этого смотрю сколько дои у меня в другой таблице соответствует каждой записи. Когда же ищу по ДОИ, то получаю то, что я показывал на картинке выше. Вся эта головная боль из-за особенного представлени данных результатов поиска. Не просто таблица, а в виде дерева...

   
 
 автор: cheops   (09.09.2005 в 15:17)   письмо автору
 
   для: vladimir_sumy   (09.09.2005 в 14:45)
 

Я если честно, просто не могу сообразить как лучше поступить из-за названий, так как не знаю что такое ДОИ - это просто ключ или у него имеется физический смысл?

   
 
 автор: vladimir_sumy   (09.09.2005 в 15:26)
 
   для: cheops   (09.09.2005 в 15:17)
 

какой-то регистрационный номер. даётся владельцу ИСБН... У одного ИСБН может быть много ДОИ но не наоборот

   
 
 автор: cheops   (09.09.2005 в 19:58)   письмо автору
 
   для: vladimir_sumy   (09.09.2005 в 15:26)
 

А один ДОИ может принадлежать разным ИСБН?

   
 
 автор: vladimir_sumy   (09.09.2005 в 15:29)
 
   для: cheops   (09.09.2005 в 15:17)
 

Да и разве важно? Вид который я хочу получить я уже показал... осталось сделать только выборку... вот только как?

   
 
 автор: napTu3aH   (09.09.2005 в 20:04)   письмо автору
 
   для: cheops   (09.09.2005 в 14:32)
 

Может сделать сортировку по группам в Мускуле, а потом средствами ПХП проверить ид и автора на уникальность, и разные Дои одного автора вывести в одну ячейку через переход строки.

   
 
 автор: vladimir_sumy   (09.09.2005 в 22:02)
 
   для: cheops   (09.09.2005 в 14:32)
 

Всё таки это то, что мне было нужно! Большое спасибо! Респект!)
И другим тоже спасибо!

   
Rambler's Top100
вверх

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