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

Форум MySQL

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

 

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

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

тема: Сложный потабличный вывод
 
 автор: FatBoy   (28.03.2006 в 17:48)   письмо автору
 
 

Запутался и не могу реализовать. Может кто уже делал такое. Помогите.

Имеется 2 таблицы: 1 таблица RUBR содержит id, заголовок, номер столбца, очередность в столбце. Вот:

  $query = "CREATE TABLE RUBR ( 
  id_rubr int(6) NOT NULL auto_increment,
  title tinytext NOT NULL,
  colum tinyint(3) NOT NULL,
  frame tinyint(3) NOT NULL,
  PRIMARY KEY  (id_rubr) 
) TYPE=MyISAM;";

2 таблица URL содержит id, id рубрики к которой принадлежит этот URL, название ссылки, саму ссылку, номер строки (очередность в рубрике)


  $query = "CREATE TABLE URL ( 
  id_url int(6) NOT NULL auto_increment,
  rubrid int(6) NOT NULL,
  linkname tinytext NOT NULL,
  url tinytext NOT NULL,
  row tinyint(3) NOT NULL,
  PRIMARY KEY  (id_url) 
) TYPE=MyISAM;";


теперь как сделать вывод этого? Я в принципе добился кое-какого вывода таблицы из 4 столбцов, в каждом столбце несколько рубрик. Но вот как внутри этих рубрик повыводить ссылки, относящиеся к этим рубрикам? По видимому должны быть 3 вложенных цикла:
первый - по столбцам (colum)
второй - по разделам (frame)
третий - по строкам (row)
как уменьшить количество запросов (не внутри же трех циклов) и как это, блин, реализовать???

   
 
 автор: Trianon   (28.03.2006 в 18:06)   письмо автору
 
   для: FatBoy   (28.03.2006 в 17:48)
 

Один запрос.
SELECT title,column,frame,linkname,url,row
FROM rubr JOIN url ON rubr.id_rubr = url.rubrid
WHERE ......
ORDER BY colum,frame,row

   
 
 автор: FatBoy   (28.03.2006 в 22:00)   письмо автору
 
   для: Trianon   (28.03.2006 в 18:06)
 

А чуть подробнее можно?

Что такое JOIN и что писать WHERE ......?
И запись ORDER BY colum,frame,row позволяет отсортировать их именно вложенно?

   
 
 автор: Trianon   (29.03.2006 в 10:31)   письмо автору
 
   для: FatBoy   (28.03.2006 в 22:00)
 

1. В разделе WHERE обычно пишут условие отбора записей. Если нужно вывести все - можно вообще эту строку не писать.

2. JOIN ... ON ... - операция соединения таблиц. Если есть две таблицы с полями, ссылающимися из одной таблицы в другую (как в Вашем примере rubr.id_rubr ----- url.rubrid) , то эта конструкция строит общую таблицу в которую входят столбцы из обоих таблиц, и строки имеющие соответствия по полям.

В принципе, можно, конечно, написать и по-старому. Но JOIN нагляднее, не мешает условия соответствия и условия отбора, и кроме того, насколько мне известно, JOIN лучше оптимизируется, чем соединение общего вида:

SELECT title,column,frame,linkname,url,row
FROM rubr,url WHERE rubr.id_rubr = url.rubrid AND условие_отбора записей
ORDER BY colum,frame,row


Кроме того (не в этом примере), с помощью JOIN легко задавать вопросы вроде таких "найти строки в одной таблице, которым в другой таблице не отвечает ни одна строка".

Элементы раздела ORDER BY записываются начиная с самого значимого и кончая наименее значимым. Так что сортировка получается "вложенной".

   
Rambler's Top100
вверх

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