|
|
|
| Запутался и не могу реализовать. Может кто уже делал такое. Помогите.
Имеется 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)
как уменьшить количество запросов (не внутри же трех циклов) и как это, блин, реализовать??? | |
|
|
|
|
|
|
|
для: 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 | |
|
|
|
|
|
|
|
для: Trianon
(28.03.2006 в 18:06)
| | А чуть подробнее можно?
Что такое JOIN и что писать WHERE ......?
И запись ORDER BY colum,frame,row позволяет отсортировать их именно вложенно? | |
|
|
|
|
|
|
|
для: 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 записываются начиная с самого значимого и кончая наименее значимым. Так что сортировка получается "вложенной". | |
|
|
|