Я создал базу данных в phpMyAdmin. Я хочу создать поиск, чтобы он отображал туристические достопримечательности. Так, например, если я напечатаю в Лондоне, появится Биг Бен, а также ряд других туристических достопримечательностей Лондона. Я хочу, чтобы иметь возможность набирать город, а затем туристические достопримечательности для этого города появятся ниже.
Все поисковые обучающие программы, на которые я смотрел, только извлекают данные из одной таблицы, и я извлекаю их из двух.
У меня есть таблица под названием city, и в этой таблице есть city_id и city_name
У меня есть второй стол, называемый аттракционами, и в этой таблице есть city_id, tourist_id, достопримечательность, широта, долгота и стоимость.
Я хотел бы иметь возможность создать поиск, поэтому, когда я набираю имя city_name, появляется имя привлекательности, широта, долгота и стоимость. Однако я не знаю, как связать эти две таблицы вместе в mysql_query. Если бы кто-нибудь мог мне помочь, это было бы здорово. Спасибо
<?php
require_once('config1.php');
$output = '';
if(isset($_POST['search'])){
$searchq = $_POST['search'];
$query = mysql_query("SELECT * FROM zz_attractions INNER JOIN city on zz_attractions.city_id = zz_city.city_id where zz_city.city_name = ? LIKE '%searchq%'") or die("could not search");
$count = mysql_num_rows ($query);
if ($count == 0) {
$output = 'there was no search results';
} else {
while $row = mysql_fetch_array($query)) {
$attraction_name = $row['attractionname'];
$lat = $row['latitude'];
$long = $row['longitude'];
$cost = $row['cost'];
$output .= '<div>'.$attraction_name.' '.lat'. '.long.' '.cost.'</div>';
}
?>
Вам нужно сделать ссылку между двумя таблицами, используя уникальное значение, которое присутствует в обоих: extra, у нас есть city_id!
Итак, что вам нужно знать, это получить значения, которые вы хотите, используя этот идентификатор.
У вас есть название города, связанное с уникальным идентификатором, и этот идентификатор приводит вас к списку туристических достопримечательностей.
Вы должны сделать два запроса SQL: - получить city_id в зависимости от city_name - получить данные с помощью этого city_id
Одним из решений является использование подзапроса:
SELECT attraction_name, latitude, longitude, cost FROM attractions WHERE city_id IN (SELECT city_id FROM city WHERE city_name ILIKE 'London');
Существует множество способов реализации поиска. Действительно простой пример для начала - использовать некоторый автозаполнение. Вы можете использовать Bootstrap TypeAhead или как в примере jQuery EasyAutocomplete.
var options = {
url: function(phrase) {
return "http://yourSearchUrl.com/search/?query=" + phrase;
},
list: {
onChooseEvent: function() {
var item = $(".autocomplete").getSelectedItemData();
//fill your additional search form with ID for submit
//$("#input-qId").val(item.id);
//or redirect to page with attraction
window.location.href = "http://yourPage.com/attraction/?id=" + item.id;
}
},
template: {
type: "custom",
method: function(value, item) {
//custom template for autocomplete container
return "<span data-id='" + item.id + "'>" + item.value + "</span>";
}
},
getValue: "value" //defines array index with value
};
//your input selector
$(".autocomplete").easyAutocomplete(options);
Для вашей страницы поиска вы можете вернуть массив JSON из select then. Два возможных сценария поиска. Когда пользователь вводит "Lo", вы можете отобразить список городов.
SELECT city_id, city_name FROM city WHERE city_name LIKE %get_url_phrase%;
Второй сценарий, который вы ищете после отправки полного имени города. Также можно вернуть результат только частичным названием города.
SELECT * FROM attractions WHERE city_id IN (SELECT city_id FROM city WHERE city_name LIKE %get_url_phrase%);
Если вы сначала ищете только город, вы можете передать city_id на страницу поиска привлекательности и выполнить запрос
SELECT * FROM attractions WHERE city_id = "cityIdParam"
Можно совместить запрос sql на точное совпадение фразы, city_name = "London", полнотекстовый поиск, во второй таблице использования запроса JOIN. Например, как предложение, например, неплохая производительность.
Результат JSON был бы в форме:
[{"id": 1, "value": "AttractionName"}]
Если вы предоставите мне более точную информацию об осуществлении, я могу ответить вам больше :)
То, что вы хотите использовать, - это запрос "join". Это выглядит немного похоже на это
SELECT * FROM table1 INNER JOIN table2 ON table1.id = table2.id;
В вашем случае этот запрос может выглядеть так:
SELECT * FROM attractions INNER JOIN city on attractions.city_id = city.city_id where city.city_name = ?