2015-06-19 4 views
0

У меня есть столбец, который я хочу сортировать. Позвольте мне объяснить, что делает код в первую очередь.Таблица сортировки, созданная PHP, не может использовать запрос для сортировки

Как вы можете видеть, существует три оператора выбора для трех таблиц и из них (имена таблиц указаны в коде). Первый запрос выбирает данные из таблицы, в которых я назначаю полученные данные из столбца id в $device_id.

Второй запрос выбирает данные из другой таблицы в соответствии со значением $device_id (только одно значение). Это вернет несколько идентификаторов платы (несколько значений). Если строки возвращены, будет создана таблица.

В этой таблице выполняется третий запрос для проверки каждой платы в третьей таблице ($table_tester_info). Если board_id существует, он будет отображаться. Пример. Если в списке 40 файлов, и из 40 только 20 возвращенных строк, строки будут отображаться в таблице.

Теперь вот в чем проблема. Я хочу сортировать таблицу по столбцу в $table_tester_info (третья таблица) однако, я могу использовать только ORDER BY во втором запросе. Это не проблема, но я хочу сортировать по column in $table_tester_info, а не $table_tester_config (вторая таблица).

Я использую jQuery, но я не хочу использовать какие-либо плагины для сортировки элементов DOM в HTML, если нет другого пути (но я уверен, что существует много способов, я просто не знаю Это). Я пробовал сортировать массив-ассоциированный (?) $tester_name или, скорее, $final_row['tester_name'], который был назначен ему.

Curerntly Моя таблица не сортируется, когда я добавляю ORDER BY в третьем запросе (который я знаю неправильно). Любая помощь по этому поводу?

<?php 

// Define database parameters 
DEFINE ('DB_USER' ,'iqwdewqe'); 
DEFINE ('DB_PASSWORD', 'iqadeaqwe'); 
DEFINE ('DB_HOST', 'qadewe'); 
DEFINE ('DB_NAME', 'Tqweqwe'); 

// Connect to database 
@mysql_connect (DB_HOST, DB_USER, DB_PASSWORD) OR die ('Could not connect' 
       .'to Database: '. mysql_error()); 
@mysql_select_db (DB_NAME) OR die ('Could not select the Database: '. mysql_error()); 

function searchDevice($device_name, $tester_type) 
{ 
    $table_device = "TBL_DEVICE_LIST"; 
    $table_tester_config = "TBL_TESTER_CONFIG"; 
    $table_tester_info = "TBL_TESTER_INFO"; 

    $query_string = "SELECT * FROM $table_device WHERE device = '$device_name' 
           AND tester_type = '$tester_type'"; 
    $device_result = @mysql_query($query_string) or die (mysql_error()); 
    $device_row = mysql_num_rows($device_result); 

    if($device_row) 
    { 
     $device_row = mysql_fetch_array($device_result); 
     $device_id = $device_row['id']; 
     // echo "Device ID: $device_id <br>"; 

     $query_string = "SELECT * FROM $table_tester_config WHERE device_id = '$device_id'"; 
     $config_result = @mysql_query($query_string) or die(mysql_error()); 
     $config_row = mysql_num_rows($config_result); 

     if($config_row) 
     { 


      while($config_row = mysql_fetch_assoc($config_result)) 
      { 
       $board_id = $config_row['board_id']; 
       $oboard = $config_row['configuration']; 
       //echo "Board ID: $board_id <br>"; 

       //Query to check if board_id exists, 
       if exists then display value in while loop 
       $query_string = "SELECT * FROM $table_tester_info 
       WHERE board_id = '$board_id' ORDER BY tester_name"; 
       $final_result = @mysql_query($query_string) or die(mysql_error()); 
       $final_row = mysql_num_rows($final_result); 

        if($final_row) 
        { 
         echo "<table border='1'>"; 
         echo "<tr> 
         <th>Board ID</th> 
         <th>Tester Name</th> 
         <th>Board Name</th> 
         <th>Configuration</th> 
         <th>Log Created</th> 
         <th>New</th> 
         </tr>"; 
         while($final_row = mysql_fetch_assoc($final_result)) 
         { 
          $board_id = $final_row['board_id']; 
          $tester_name = $final_row['tester_name']; 
          $board_name = $final_row['board_name']; 
          $config = $final_row['config']; 
          $log_created = $final_row['log_created']; 

          echo "<tr> 
             <td>$board_id</td> 
             <td>$tester_name</td> 
             <td>$board_name</td> 
             <td>$config</td> 
             <td>$log_created</td> 
             <td>$oboard</td> 
            </tr>"; 
         } 
        } 
      } 
      echo "</table>"; 
     } 
    } 
    else 
    { 
     echo "No Device Name: $device_name with Tester Type: $tester_type."; 
    } 
} 

?> 

<?php 

$action = rtrim($_REQUEST['action']); 

if($action=="search") 
{ 
    $device_name = rtrim($_REQUEST['device_name']); 
    $tester_type = rtrim($_REQUEST['tester_type']); 

    echo searchDevice($device_name, $tester_type); 
} 

?> 
+1

Не можете ли вы просто сделать это одним запросом? –

+0

@ Ja͢ck Если это возможно, я не знаю, как это сделать. Я выбираю вторую таблицу на основе значения из первой таблицы. Затем я проверяю, доступны ли в третьей таблице множественные значения, возвращаемые из второй таблицы. В настоящее время все еще найдется способ сделать это одним запросом. – hzq

ответ

0

Объединить запросы 2 и 3 с соединением. Используя внутреннее соединение, вы получаете только строку, если соединение выполнено успешно.

т.е.

select tti.* 
from $table_tester_config ttc 
inner join $table_tester_info tti 
    on tti.board_id = ttc.board_id 
where td.device = '$device_name' and td.tester_type = '$tester_type' 
order by tti.tester_name 

Затем цикл через эти результаты.

+0

Ahh да, я делал это, я на самом деле решил это, но позвольте мне опубликовать его в качестве вопроса. Это было что-то вроде этого, но я выяснял, как объединить все три. – hzq

0

Спасибо, Джек и Крис за то, что дали мне эту идею. Точный, который мне нужен был на самом деле (я жестко закодировал данные):

SELECT ti.* 
FROM TBL_TESTER_INFO ti 
INNER JOIN TBL_TESTER_CONFIG tc 
ON ti.board_id = tc.board_id 
INNER JOIN TBL_DEVICE_LIST dl 
ON dl.id = tc.device_id 
WHERE dl.device = '53262' 
AND dl.tester_type = 'UFLEX' 
ORDER BY tester_name ASC; 
Смежные вопросы