2013-04-25 2 views
0

Извиняется за вопрос «программирование для чайников» ... Я тщетно искал предыдущую дискуссию об этом.Сортировка результатов с использованием PHP/MySQL на основе ввода пользователем

Итак, у меня есть таблица MySQL, полная моторных лодок. Каждая строка имеет базовую информацию о моторной лодке (make/model/etc.) Плюс оценки от 1 до 10 для нескольких разных характеристик - «мощность», «комфорт» и «стиль». Я хочу помочь пользователям найти моторную лодку, которая отвечает их индивидуальным потребностям.

По умолчанию данные отсортированы по «totalscore» от высокой к низкой, например, так:

$sql = "SELECT *,(power + comfort + style) as totalscore FROM boats ORDER BY totalscore DESC"; 

... и я Переберите результатов с PHP и отображать их в виде списка.

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

Других слов, я хочу $_SESSION["totalscore"] изменить с каждым Да/Нет ввода данных пользователя ... и результаты этого пользователя должны затем быть заказаны от максимума до минимума на $_SESSION["totalscore"], а не оригинальный totalscore из базы данных.

Схема Пример

  1. Boston Whaler 370. Мощность = 7, комфорт = 8, стиль = 6, totalscore = 21
  2. Boston Whaler 350. Мощность = 5, комфорт = 7, стиль = 8, totalalscore = 20

Вопрос 1: Вы любите стиль? Да/Нет

if Yes { 
    $_SESSION["totalscore"] = totalscore + style; 
    reorder list items by $_SESSION["totalscore"]; // the 350 is now #1 
    } 
    if No { 
    $_SESSION["totalscore"] = totalscore + (style/2); 
    reorder list items by $_SESSION["totalscore"]; // they're now tied for #1 
    } 

Etc.

Что расцепления меня концептуально является то, что $_SESSION["totalscore"] будет храниться в виде печенья, в то время как оригинальный totalscore приходит из запроса к базе данных. Поэтому, как только я переключаюсь с totalalscore на $_SESSION["totalscore"], я не понимаю, как изменить порядок элементов списка.

Может кто-нибудь указать мне в правильном направлении, если только схематически? Я хочу понять это, но я не уверен, что делать дальше. Огромное спасибо.

ответ

0

Вы можете сохранить итоговое значение из сеанса в результаты, полученные из базы данных, и использовать функцию сортировки php для изменения порядка результатов.

+0

Спасибо, но я могу быть более манекена, чем ты взял меня за. :) Можете ли вы вкратце объяснить, как «хранить» переменную сеанса «в результатах из базы данных»? Я понимаю параметры сортировки PHP, но я не понимаю, как собрать вместе переменную сеанса и результаты базы данных. Спасибо. – motorbeast

0

Одним из способов может быть, вместо того, чтобы выбрать общий балл в запросе и затем один раз сортировки результат, сделать запрос каждый раз, когда пользователь изменяет предпочтения

Пример

SELECT (power + rating + style) as total_score from boats order by total_score; 

Затем цикл через результаты и отображение первого набора результатов. Дайте пользователю варианты, чтобы сделать свой выбор, а затем выполнить запрос снова следующим образом -

if(style_matters) 
{ 
    $q = mysql_query("SELECT (power + rating + 2*style) as total_score from boats order by total_score"); 
    //use this new result set in $q to present the new listing 
} 
else 
{ 
    $q = mysql_query("SELECT (power + rating + style/2) as total_score from boats order by total_score"); 
    //use this for result set when style doesnt matter. 
} 

Это может быть дорогостоящей операцией, если у вас есть очень огромное количество DB хитов, но я не думаю, что было бы много вопрос.

Вы можете запустить этот запрос с помощью AJAX, чтобы избежать перезагрузки страниц.

EDIT: Вы даже не заметите, что несколько запросов БД происходят до тех пор, пока вы не начнете наносить 6-7 цифр. Хотя вы никогда не должны использовать «SELECT * from» в своих запросах. Всегда указывайте точные столбцы, которые вы хотите использовать. Также в вашем конкретном случае вы можете ограничить количество результатов, которые вы представляете пользователю. Представьте 10 результатов на одной странице, следующей 10 на другой. Ограничение результатов может существенно повлиять на запрос.

Does adding 'LIMIT 1' to MySQL queries make them faster when you know there will only be 1 result?

MySQL pagination without double-querying?

+0

Спасибо, я дам этот выстрел. Я был невнимателен к запуску нескольких запросов БД, но, по крайней мере, было бы легче получить что-то и запустить. – motorbeast

+0

Прочтите мое редактирование для более качественных запросов. –

Смежные вопросы