Создание поиска в php - набор текста в городе и получение достопримечательностей для этого города, перечисленных ниже

0

Я создал базу данных в 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>';

    }
?>
Теги:
phpmyadmin

3 ответа

0

Вам нужно сделать ссылку между двумя таблицами, используя уникальное значение, которое присутствует в обоих: 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');
  • 0
    Я думаю, что подзапрос в этом случае может работать не так хорошо, как использование внутреннего соединения.
  • 0
    Большое спасибо, я буквально только начинаю, поэтому мне потребуется время, чтобы начать поиск, но попробую этот код и приведенный ниже код, чтобы увидеть, работает ли какой-либо из них для меня
0

Существует множество способов реализации поиска. Действительно простой пример для начала - использовать некоторый автозаполнение. Вы можете использовать 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"}]

Если вы предоставите мне более точную информацию об осуществлении, я могу ответить вам больше :)

  • 0
    Поэтому для части javascript я добавлю это в файл js, который у меня есть? А затем создать поиск PHP, как я буду связывать эти две страницы? Я просто собираюсь иметь свой php в моем файле search.html, но я изменю его на search.php
  • 0
    Вы можете добавить код JS в файл javascript и включить туда, где находится ваш HTML-шаблон вашей текущей страницы. Затем просто отредактируйте ссылки на страницу поиска. На странице поиска получите параметр из URL ($ _GET ['фраза']) и перейдите к SQL-запросу. Возвратите ответ как application / json с данными.
0

То, что вы хотите использовать, - это запрос "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 = ?
  • 0
    Большое спасибо, я буквально только начинаю, поэтому мне потребуется время, чтобы начать поиск, но попробую этот код и приведенный выше код, как посмотреть, работает ли какой-либо из них для меня
  • 0
    Я следовал этому руководству youtube.com/watch?v=PBLuP2JZcEg и добавил ваш код в запрос $. В настоящее время я получаю сообщение об ошибке. Неустранимая ошибка: необученная ошибка: вызов неопределенной функции mysql_query () в файле SEARCH.PHP в строке 8. Знаете ли вы, что это значит?
Показать ещё 2 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню