2013-12-05 8 views
0

У меня есть две таблицы в моей базе данных. Одним из них является jobs, а другой type_of_service где столбцы case_reference и ref_number являются переплетены, что означает для каждого случая case_reference такое же число появляется в ref_number и он является уникальным и авто увеличение пользовательского пути, и они выглядят как:MySQL escaping empty/null records

JOBS 
========== 

case_reference | customer | vessel 
===============|==========|======== 
    1311/2  | Dave | rg8 
    1311/3  | Billy | fjg32 
    1311/4  | Alex | sh599 

и:

TYPE_OF_SERVICE 
=============== 

ref_number | one | two | three | four 
======================================== 
    1311/2 |fire |  |  | medical 
    1311/3 |  |foam |  |   
    1311/4 |  |foam |engine | medical 

Теперь в моем веб приложения я хотел бы, чтобы показать результаты поиска пути как:

reference | customer | vessel | type of service 
================================================ 
    1311/2 | Dave | rg8 | fire-medical 
    1311/3 | Billy | fjg32 | foam 
    1311/4 | Alex | sh599 | foam-engine-medical 

Метод получения моих результатов:

$ records = array();

// build array of field names============================================================================= 
     $fields=array('customer','vessel', 
        'one','two','three','four'); 

     // initialize empty array for WHERE clauses 
     $wheres=array(); 

     // loop through field names, get POSTed values, 
     // and build array of WHERE clauses, excluding false values 
     foreach ($fields as $field) { 
      // get existing field value from POST, mark missing or empty value as FALSE 
      ${$field} = isset($_POST[$field]) && trim($_POST[$field])!='' 
       ? trim($_POST[$field]) : false; 

      // add to array of WHERE clauses only if value is not FALSE 
      if (${$field}) { $wheres[]="$field LIKE '%".${$field}."%'"; } 

     } 
     // build SELECT statement from WHERE clauses 
     $sql="SELECT * FROM jobs,services WHERE ref_number = case_reference AND ". 
      (!empty($wheres) ? implode(" AND ",$wheres) : '1=1'). 
      ";"; 

и метод, чтобы показать им:

<tbody> 
      <?php 
       foreach($records as $r) { 
        $watson = $r->case_reference; 
       ?> 
        <tr> 
         <td><?php echo escape($r->case_reference); ?></td> 
         <td><?php echo escape($r->customer); ?></td> 
         <td><?php echo escape($r->vessel); ?></td> 
         <td><?php for ($i=0; $i <= $found; $i++) { echo escape(<?php echo '<pre>'.$records[$i]->one.'-'.$records[$i]->two.'-'.$records[$i]->three.'-'. 
             $records[$i]->four'</pre>'} ?>); ?></td> 
        </tr> 
       <?php 
       } 
       ?> 
     </tbody> 

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

reference | customer | vessel | type of service 
================================================ 
    1311/2 | Dave | rg8 | fire---medical-, 
    1311/3 | Billy | fjg32 | -foam--- 
    1311/4 | Alex | sh599 | -foam-engine-medical- 

Есть ли способ/function для достижения желаемого эффекта без отображения дополнительных "-" или дополнительных пробелов для пустых ячеек в таблице type_of_service?

+0

Ваши вопросы? –

+0

показать запрос, который вы написали – Litmus

+0

Я обновил свой первоначальный пост тем, как я создаю свои запросы. –

ответ

1

можно упростить с помощью CONCAT_WS

От MySQL Documentation

mysql> SELECT CONCAT_WS(',','First name','Second name','Last Name'); 
    -> 'First name,Second name,Last Name' 
mysql> SELECT CONCAT_WS(',','First name',NULL,'Last Name'); 
    -> 'First name,Last Name' 

Таким образом, SQL запрос будет

SELECT a.case_reference AS reference, 
     a.customer AS customer, 
     a.vessel AS vessel, 
     CONCAT_WS('-',b.one,b.two,b.three,b.four) AS types_of_service 
FROM JOBS a, 
    TYPES_OF_SERVICE b 
WHERE a.case_reference = b.ref_number; 

Как вы можете видеть, я предположил, что поле, чтобы содержать NULL если нет значения

ref_number | one | two | three | four 
======================================== 
1311/2  |fire | NULL| NULL | medical 

Если это не так, потребуется дополнительная работа.

+0

Спасибо за ваш ответ Litmus.You на самом деле заставил меня понять, что моя проблема в моей таблице не была NULLable и вот почему у меня была эта проблема. Если я сделаю все пустые записи нулевыми, моя проблема будет решена с использованием CONCAT_WS, о котором вы говорили выше! –