|
|
|
| Помогите составить запрос к базе данных, используется три таблицы:
1. Таблица где лежат названия улиц.
CREATE TABLE `map_streets` (
`id` int(11) NOT NULL auto_increment,
`name` varchar(150) default NULL,
KEY `id` (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=cp1251 PACK_KEYS=0 AUTO_INCREMENT=1 ;
--
-- Дамп данных таблицы `map_streets`
--
INSERT INTO `map_streets` VALUES (1, 'бульвар Строителей');
2. Изображения.
CREATE TABLE `map_image` (
`id` int(11) NOT NULL auto_increment,
`img` varchar(100) default NULL,
KEY `id` (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=cp1251 AUTO_INCREMENT=1 ;
--
-- Дамп данных таблицы `map_image`
--
INSERT INTO `map_sectors` VALUES (1, '1.jpg');
3. Поисковый запрос.
CREATE TABLE `map_search` (
`id` int(11) NOT NULL auto_increment,
`street` varchar(250) default NULL,
`house` varchar(100) default NULL,
`image` varchar(100) default NULL,
KEY `id` (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=cp1251 AUTO_INCREMENT=1 ;
--
-- Дамп данных таблицы `map_search`
--
INSERT INTO `map_sectors` VALUES (1,1, 100, 1');
При поиске по названию улицы нужно вывести соответствующее
изображение.
Спасибо за ответ. | |
|
|
|
|
|
|
|
для: kis-kis
(02.04.2007 в 18:38)
| | >1. Таблица где лежат названия улиц....
...более менее понятна, чего не скажешь об остальном.
>2. Изображения.
>CREATE TABLE `map_image` (
>-- Дамп данных таблицы `map_image`
>INSERT INTO `map_sectors` VALUES (1, '1.jpg');
что это за map_sectors?
>3. Поисковый запрос.
>CREATE TABLE `map_search` (
> `id` int(11) NOT NULL auto_increment,
> `street` varchar(250) default NULL,
> `house` varchar(100) default NULL,
> `image` varchar(100) default NULL,
>-- Дамп данных таблицы `map_search`
т.е. имя - map_search, поля - целое и три строки, так?
А тут что?
>INSERT INTO `map_sectors` VALUES (1,1, 100, 1'); | |
|
|
|
|
|
|
|
для: Trianon
(02.04.2007 в 18:53)
| | Простите, ошибся...
1. Таблица где лежат названия улиц.
CREATE TABLE `map_streets` (
`id` int(11) NOT NULL auto_increment,
`name` varchar(150) default NULL,
KEY `id` (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=cp1251 PACK_KEYS=0 AUTO_INCREMENT=1 ;
--
-- Дамп данных таблицы `map_streets`
--
INSERT INTO `map_streets` VALUES (1, 'бульвар Строителей');
2. Изображения.
CREATE TABLE `map_sectors` (
`id` int(11) NOT NULL auto_increment,
`img` varchar(100) default NULL,
KEY `id` (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=cp1251 AUTO_INCREMENT=1 ;
--
-- Дамп данных таблицы `map_sectors`
--
INSERT INTO `map_sectors` VALUES (1, '1.jpg');
3. Поисковый запрос.
CREATE TABLE `map_search` (
`id` int(11) NOT NULL auto_increment,
`street` varchar(250) default NULL,
`house` varchar(100) default NULL,
`image` varchar(100) default NULL,
KEY `id` (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=cp1251 AUTO_INCREMENT=1 ;
--
-- Дамп данных таблицы `map_search`
--
INSERT INTO `map_search` VALUES (1,1, 100, 1'); | |
|
|
|
|
|
|
|
для: kis-kis
(02.04.2007 в 19:00)
| | назначение третьей таблицы неясно.
Также удивляет, что 1,1,100,1 лежит в varchar-полях, даже если исправить ошибку в операторе insert | |
|
|
|
|
|
|
|
для: Trianon
(02.04.2007 в 19:03)
| | Поиск осуществляется по названию улицы и номеру дома.
map_streets - база улиц
map_sectors - участки карты
map_search - таблица, в которой указано - id - улицы, id - картинки, номер дома.
При поиске ищем совпадение в названии улицы и номера дома и загружаем определенный кусок карты. | |
|
|
|
|
|
|
|
для: kis-kis
(02.04.2007 в 19:46)
| |
SELECT img
FROM map_streets JOIN map_search ON map_streets.id = map_search.street
JOIN map_sectors ON image=map_sectos.id
WHERE house = $house_number AND name = '$street_name'
|
$house_number - очищенный номер дома
$street_name - заэкранированное название улицы
типы полей street, house и image в таблице map_search нужно исправить на INT(11) | |
|
|
|
|
|
|
|
для: kis-kis
(02.04.2007 в 19:46)
| | Т.к. вариантов поиска будет много, сделали 3 таблицы... Теперь более менее понятно что хотелось бы? | |
|
|
|
|
|
|
|
для: kis-kis
(02.04.2007 в 20:00)
| | Нет. Совершенно непонятно.
Я написал ответ в предположении, что map_search - таблица, описывающая соответствие адресов картинкам. Соответствие это совершенно не зависит от того, запрашивал ли кто-либо какой-либо поиск, а если да , то сколько раз.
Из имени таблицы (да и Вы настаиваете, что это таблица поиска) делается вывод, что это не так. Тогда я не понимаю сути третьей таблицы. | |
|
|
|
|
|
|
|
для: kis-kis
(02.04.2007 в 20:00)
| | Может тогда так?
SELECT img
FROM map_streets JOIN map_search ON map_streets.id = map_search.street
JOIN map_sectors ON image=map_sectos.id
WHERE house = $house_number AND name like '%$street%'
|
| |
|
|
|
|
|
|
|
для: kis-kis
(02.04.2007 в 20:16)
| | Какая таблица Вы считаете лишняя? | |
|
|
|
|
|
|
|
для: kis-kis
(02.04.2007 в 20:20)
| | ни одной лишней таблицы не заметил.
Если я таки прав - просто таблице имеет смысл дать другое название.
map_location например. | |
|
|
|
|
|
|
|
для: kis-kis
(02.04.2007 в 20:16)
| | Если Вы готовы в в ответ на запрос улицы мира получить адмиралтейскую набережную - тогда конечно. | |
|
|
|
|
|
|
|
для: Trianon
(02.04.2007 в 20:21)
| | Что Вы посоветуете? | |
|
|
|
|
|
|
|
для: kis-kis
(02.04.2007 в 20:22)
| | добавить в таблицу map_street поле с типом объекта. (улица, переулок, проспект, площадь, бульвар, набережная,шоссе, дорога, аллея) и не включать его в фильтр запроса. | |
|
|
|
|
|
|
|
для: Trianon
(02.04.2007 в 20:26)
| | Что-то вроде этого:
$query1 = "SELECT * FROM map_streets WHERE name like '%$street%'";
$result1=mysql_query($query1) or die("<B>Error ".mysql_errno()." :</B> ".mysql_error()."");
$row1 = mysql_fetch_array($result1);
$query2 = "SELECT * FROM map_search WHERE street = $row1[id] and house = $house";
$result2=mysql_query($query2) or die("<B>Error ".mysql_errno()." :</B> ".mysql_error()."");
$row2 = mysql_fetch_array($result2);
$query3 = "SELECT * FROM map_sectors WHERE id = $row2[image]";
$result3=mysql_query($query3) or die("<B>Error ".mysql_errno()." :</B> ".mysql_error()."");
$row3 = mysql_fetch_array($result3);
|
Приблизительно такой запрос работает... | |
|
|
|
|
|
|
|
для: kis-kis
(02.04.2007 в 20:38)
| | Покороче нельзя сделать данный запрос?
Спасибо. | |
|
|
|
|
|
|
|
для: kis-kis
(03.04.2007 в 11:24)
| | Вы попросили написать запрос , который бы делал следующее, цитирую:
При поиске по названию улицы нужно вывести соответствующее изображение.
Я предложил такой запрос - (02.04.2007 в 20:00) ,
Вы внесли незначительные коррективы (02.04.2007 в 20:16)
Заметьте - запрос один.
после чего написали код, формирующий три запроса, но не выводящий ничего (02.04.2007 в 20:38).
И спрашиваете, как сделать покороче.
После этого я окончательно перестал понимать, что же, собственно, требуется. | |
|
|
|
|
|
|
|
для: Trianon
(03.04.2007 в 11:36)
| | Почему не выводящий ничего?
Выведет нужное изображение... | |
|
|
|
|
|
|
|
для: kis-kis
(03.04.2007 в 12:28)
| | Потому что этой строки в Вашем коде не было.
В варианте одного запроса нужное изображение выведет точно такая же строка. | |
|
|
|
|
|
|
|
для: Trianon
(02.04.2007 в 20:21)
| | Простите, а какой код будет оптимален? Ваш из одного запроса или тот из 3-х запросов? Или разницы нет никакой? Спасибо. | |
|
|
|
|
|
|
|
для: kis-kis
(03.04.2007 в 13:49)
| | Из одного. | |
|
|
|
|
|
|
|
для: Trianon
(03.04.2007 в 13:50)
| | Простите, а как тогда будет выглядеть сам вывод изображения?
С вашим кодом?
| |
|
|
|
|
|
|
|
для: kis-kis
(03.04.2007 в 14:57)
| | Да точно также, как и с Вашим:
<?
$query3 = "SELECT img
FROM map_streets JOIN map_search ON map_streets.id = map_search.street
JOIN map_sectors ON image=map_sectos.id
WHERE house = $house AND name = '$street' ";
$result3=mysql_query($query3) or die("<B>Error ".mysql_errno()." :</B> ".mysql_error()."");
$row3 = mysql_fetch_array($result3);
echo $row3['img'];
|
| |
|
|
|
|
|
|
|
для: Trianon
(03.04.2007 в 15:15)
| | Код не работает...
Рисунок мы берем из таблицы map_sectors, а у вас из map_streets...
Может вы зададите вопросы что Вам не понятно, а я отвечу. Возможно так прояснится ситуация... )) | |
|
|
|
|
|
|
|
для: kis-kis
(03.04.2007 в 15:42)
| | >Код не работает...
Во второй строке запросе я опечатался. Пропустил букву r в имени map_sectors
Код работает. У меня во всяком случае.
>Рисунок мы берем из таблицы map_sectors, а у вас из map_streets...
Рисунок мы берем из соединения всех трех таблиц.
>Может вы зададите вопросы что Вам не понятно, а я отвечу. Возможно так прояснится ситуация... ))
Впечатление такое, что я пропустил момент подписания контракта. | |
|
|
|
|
|
|
|
для: Trianon
(03.04.2007 в 16:11)
| | А каким образом вы определяете какая была улица? Я имею ввиду поисковый запрос. Какой переменной вы его передаете? | |
|
|
|
|
|
|
|
для: kis-kis
(03.04.2007 в 16:25)
| | Вот полный тест:
<?php include('config.inc.php');
$street = 'бульвар Строителей'; $house = 1;
$query3 = "SELECT img
FROM map_streets JOIN map_search ON map_streets.id = map_search.street
JOIN map_sectors ON image=map_sectors.id
WHERE house = $house AND name = '$street' ";
$result3=mysql_query($query3) or die("<B>Error ".mysql_errno()." :</B> ".mysql_error()."");
$row3 = mysql_fetch_array($result3);
echo $row3['img'];
?>
|
| |
|
|
|