Member 14721629 Ответов: 1

Php SQL concat проблема


Овации,

Я хочу объединить несколько строк в один столбец

Прямо сейчас мой вывод таков:

CaseID   Name        Number    Register date    filename    Actions 
2        John Doe    3/2020    2020-01-20       test1.pdf    delete
2        John Doe    3/2020    2020-01-20       test2.pdf    delete
3        Jane Doe    5/2020    2020-01-20       test3.pdf    delete

Я хочу что-то вроде этого:

CaseID   Name        Number    Register date    filename    Actions 
    2    John Doe    3/2020     2020-01-20      test1.pdf    delete
                                                test2.pdf

    3    Jane Doe    5/2020    2020-01-20       test3.pdf    delete

Весь день я пробовал разные SQL-операторы, но ничего не работает. Я застрял, я понятия не имею, как это решить, потому что мне нужно использовать левое соединение для 2 таблиц:

$sql = "SELECT * FROM files as f
         LEFT JOIN cases AS c on f.id_case_f = c.id_case
         LEFT JOIN customers as cs on c.id_customer = cs.id_cust
         WHERE case_number LIKE '%$case_number%'";
$result = $db -> query($sql);


Что я уже пробовал:

I have tried with GROUP_CONCAT I have used the statement below, but it doesn't work.

    <pre><?php
$db = mysqli_connect("localhost", "root", "", "testdb");
if ($db -> connect_error){

    if($_REQUEST['submit']){
        $case_number = $_POST['case_number'];


        if(empty($case_number)){
           $make = '<h4>You must type a word to search!</h4>';
       }else{
           $make = '<h4></h4>';
           $sql = "SELECT id_case_f, GROUP_CONCAT(filename SEPARATOR ', ') FROM files
           LEFT JOIN cases AS c on f.id_case_f = c.id_case
           LEFT JOIN customers as cs on c.id_customer = cs.id_cust
           WHERE case_number LIKE '%$case_number%'
           GROUP BY id_case_f;";

           $result = $db -> query($sql);

           if($make = mysqli_num_rows($result) > 0)
               { echo '<table>
           <tr><th>CaseID</th>
           <th>Name </th>
           <th>Number </th>
           <th>Register date</th>
           <th>filename</th>
           <th>Actions</th></tr>';

           while($row = mysqli_fetch_assoc($result))
           {
              echo "<tr><td>". $row["id_case"] ." </td><td>". $row["name"] . " </td>
              <td>". $row["number"] ."</td> <td> "  . $row["register_date"] ." </td>
              <td> ". $row["filename"] ." </td><td><a href=#>delete</a></td></tr> ";
          }
          echo "</table>";
      }
      else
      {
        echo'<table "><tr><th>Try again! </th></tr></table>';

        print ($make);
    }
    mysqli_free_result($result);
    mysqli_close($db);
}
}
?>

Кроме того, я использовал множество других комбинаций, но, к сожалению, ничего не сработало. :(

Если это необходимо, я могу добавить весь PHP-код, но этот вопрос касается оператора select

Может ли кто - нибудь помочь мне с этим? Спасибо

Ошибки:

Notice: Undefined index: id_case in /// on line 196
Notice: Undefined index: name
Notice: Undefined index: number
Notice: Undefined index: register_date
Notice: Undefined index: filename

1 Ответов

Рейтинг:
7

Wendelius

Вы могли бы попробовать что-то вроде

SELECT cs.*,
       c.*,
       (SELECT GROUP_CONCAT(f2.filename ORDER BY f2.filename SEPARATOR ', ') 
        FROM files f2
        WHERE f2.id_case_f = c.id_case) AS filenames
FROM cases AS c 
LEFT JOIN customers as cs on c.id_customer = cs.id_cust
WHERE EXISTS (SELECT 1 
              FROM files f
              WHERE f.id_case_f = c.id_case
AND   case_number LIKE '%$case_number%'


Member 14721629

Определенно работать. Большое спасибо. Ты спас меня!!

Wendelius

Пожалуйста