Как правильно построить запрос в БД для моего случая

PROhvost

Новичок
Как правильно построить запрос в БД для моего случая

Есть три таблицы:
PHP:
-- 
-- Структура таблицы `san_data`
-- 

CREATE TABLE `san_data` (
  `id` bigint(20) NOT NULL auto_increment,
  `name` char(255) character set utf8 collate utf8_unicode_ci default '',
  PRIMARY KEY  (`id`),
  UNIQUE KEY `name` (`name`),
  KEY `san_dataname` (`name`)
) ENGINE=MyISAM DEFAULT CHARSET=cp1251 AUTO_INCREMENT=8 ;

-- 
-- Дамп данных таблицы `san_data`
-- 

INSERT INTO `san_data` VALUES (1, 'Виктория');
INSERT INTO `san_data` VALUES (2, 'Ленинские скалы');
INSERT INTO `san_data` VALUES (3, '40 Лет Победы');
INSERT INTO `san_data` VALUES (4, 'Горный воздух');
INSERT INTO `san_data` VALUES (5, 'Солнечный');
INSERT INTO `san_data` VALUES (6, 'Салют');
INSERT INTO `san_data` VALUES (7, 'Геолог Казахстана');

-- 
-- Структура таблицы `san_metaclass1`
-- 

CREATE TABLE `san_metaclass1` (
  `id` bigint(20) NOT NULL auto_increment,
  `data_id` int(11) NOT NULL default '0',
  `field1` int(11) default NULL,
  PRIMARY KEY  (`id`),
  KEY `field1` (`field1`)
) ENGINE=MyISAM DEFAULT CHARSET=cp1251 AUTO_INCREMENT=7 ;

-- 
-- Дамп данных таблицы `san_metaclass1`
-- 

INSERT INTO `san_metaclass1` VALUES (1, 1, 4);
INSERT INTO `san_metaclass1` VALUES (2, 2, 1);
INSERT INTO `san_metaclass1` VALUES (3, 3, 2);
INSERT INTO `san_metaclass1` VALUES (4, 4, 3);
INSERT INTO `san_metaclass1` VALUES (5, 5, 1);
INSERT INTO `san_metaclass1` VALUES (6, 6, 1);

-- 
-- Структура таблицы `san_referencevalue`
-- 

CREATE TABLE `san_referencevalue` (
  `id` bigint(20) NOT NULL auto_increment,
  `value` char(255) character set utf8 collate utf8_unicode_ci default '',
  `reference_id` int(11) NOT NULL default '0',
  PRIMARY KEY  (`id`),
  UNIQUE KEY `value` (`value`,`reference_id`),
  KEY `san_referencevaluevalue` (`value`)
) ENGINE=MyISAM DEFAULT CHARSET=cp1251 AUTO_INCREMENT=5 ;

-- 
-- Дамп данных таблицы `san_referencevalue`
-- 

INSERT INTO `san_referencevalue` VALUES (1, 'Пятигорск', 1);
INSERT INTO `san_referencevalue` VALUES (2, 'Кисловодск', 1);
INSERT INTO `san_referencevalue` VALUES (3, 'Железноводск', 1);
INSERT INTO `san_referencevalue` VALUES (4, 'Ессентуки', 1);
Написал код:
PHP:
$query = "SELECT * FROM san_metaclass1 LEFT JOIN san_referencevalue ON san_metaclass1.field1=san_referencevalue.id ORDER BY value";
$metaclass = mysql_query($query) or die("Query failed : " . mysql_error());

while($row = mysql_fetch_assoc($metaclass)){

extract($row);

echo ''.$value.'<br />';

$query = "SELECT * FROM san_data WHERE id='$data_id'";
$data = mysql_query($query) or die("Query failed : " . mysql_error());
$line = mysql_fetch_assoc($data);
extract($line);
echo '<b>'.$name.'</b><br />';
}
В итоге получается так:

Ессентуки
Виктория

Железноводск
Горный воздух

Кисловодск
40 Лет Победы

Пятигорск
Ленинские скалы

Пятигорск
Солнечный

Пятигорск
Салют

А нужно:

Ессентуки
Виктория

Железноводск
Горный воздух

Кисловодск
40 Лет Победы

Пятигорск
Ленинские скалы
Солнечный
Салют


Что можно сделать, ума не хватает, прошу помощи.
 

Фанат

oncle terrible
Команда форума
ты сам этот код писал?
ты понимаешь, какая строчка отвечает за нужное тбе место?

-~{}~ 17.02.07 15:17:

и при чем здесь запрос?
 

PROhvost

Новичок
Код писал сам, руководствуясь мануалом и некоторыми книжками и вцелом понимаю как это работает. Я не профессиональный программист, поэтому и прошу помочь разобраться. Возможно изменив сам запрос и построив цикл подругому, получится то что мне нужно.
 

PROhvost

Новичок
Все разобрался,
PHP:
S$query = "ELECT * FROM san_metaclass1 LEFT JOIN san_referencevalue ON san_metaclass1.field1=san_referencevalue.id ORDER BY value";
это разьве не запрос?

PHP:
   	$query = "SELECT san_referencevalue.value, san_data.name FROM  san_data JOIN san_metaclass1 ON (san_data.id=san_metaclass1.data_id)  JOIN san_referencevalue ON (san_metaclass1.field1=san_referencevalue.id) order by value, name";
   	$metaclass = mysql_query($query) or die("Query failed : " . mysql_error());

while($row = mysql_fetch_assoc($metaclass)){
    $result[$row['value']][] = $row['name'];
}
foreach ($result as $value => $names) {
    echo '<b>'.$value.'</b><br />';
    foreach ($names as $name) {
        echo ''.$name.'<br />';
    }
    echo '<br />';
}
Так работает.
 

Фанат

oncle terrible
Команда форума
вообще-то, у тебя там было два запроса. если ты вдруг не заметил.
Вот я и интересовался, какой из них ты хочешь изменить.

А что разобрался - это хорошо. Это правильно.
 
Сверху