Как создать массив php из результата mysql, выполнить расчет, массив массива, представить результаты - PullRequest
0 голосов
/ 11 апреля 2011

У меня есть веб-сайт с фотографиями, на котором я пытаюсь выполнить запрос к базе данных MySQL. Запрос относится к объединенному полю «title» и «ключевое слово» с названием «title_keyword». Я хочу взять результаты поиска и отсортировать их по вновь сформированной переменной «sort_priority», которая проверяет, находится ли искомое слово в поле «заголовок». Если оно находится в поле «title», то я хочу присвоить значение 1, а если нет в поле title, то значение 2. Полученный массив будет отсортирован по «sort_priority» и выведен на экран.

Вот логика, которую я использую с PHP и MySQL:

1) Запросите базу данных MySQL и назначьте переменные. (Это работает просто отлично)

2) Возьмите результаты, присвойте каждое поле переменной, создайте новую переменную, которая выполняет вычисление для одной из возвращенных переменных

$data_array=array();
// get each row
while($row = mysql_fetch_array($result))
{
//get data
$image_id = "{$row['image_id']}";
$title = "{$row['title']}";
$imageurl = "{$row['imageurl']}";


// Create sort_priority to identify if search word is in title field. 
//If it is then set to 1 to force this higher in the result list after sorting

$sort_priority = 2;
if(stristr($title,$search))
{ $sort_priority = 1;}

Все, что выше этой точки, работает. Теперь для части, на которой я поставлен в тупик. Как создавать и добавлять данные в массив, а затем сортировать по моей новой переменной $ sort_priority.

Вот то, что я написал, но это просто не работает **

// Create array and sort by title then keyword (tk_sort)
$data_array = array(
'image_id' => $image_id, 
'title' => $title, 
'imageurl' => $imageurl, 
'sort_priority' => $sort_priority);

// Obtain a list of columns
foreach ($data_array as $key => $row) {
    $image_id[$key]  = $row['image_id'];
    $title[$key] = $row['atitle'];
    $imageurl[$key]  = $row['imageurl'];
    $sort_priority[$key] = $row['sort_priority'];
}

// Sort the data with volume descending, edition ascending
// Add $data as the last parameter, to sort by the common key

array_multisort($sort_priority, SORT_ASC);

// end of array creation and sort

3) Вывести вновь отсортированный массив в таблицу

Не уверен, как извлечь из него данные. Должен ли я использовать цикл или что-то?

1 Ответ

0 голосов
/ 11 апреля 2011

Вы можете просто позволить MySQL выполнять большую часть работы.Это должно работать (сам не пробовал):

SELECT CONCAT_WS('-', `title`, `keyword`) AS search_term,
IF( INSTR(`search_term`, 'your_search_value_here') > 0, 1, 2 ) AS priority_key,
`image_id`, `imageurl`
FROM table_name_here
ORDER BY `priority_key`;

HTH.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...