Как отобразить имена последнего загруженного файла - PullRequest
1 голос
/ 17 мая 2011

Меня спросили, что выходной файл должен выводить только имя и идентификатор последнего человека, который загрузил файл с определенным именем.сбивает с толку верно?даже я в замешательстве.Позвольте мне привести пример

. Допустим, в вашей компании зарегистрировано 3 сотрудника.давайте назовем их

  1. Пикачу,
  2. Райчу и
  3. Пичу.

В компании Пикачу загружено 3 файла, в Райчу загружено 2 файла, а в Пичу также 2 файла.Файлы также должны быть упорядочены в соответствии с именем сотрудника (ASC) и именем файла (DESC).Шахта уже в порядке.Это моя единственная проблема.В этом случае результат должен выглядеть следующим образом:

* заметил, что имя сотрудника и идентификатор сотрудника находятся в последнем загруженном файле ??Кто-нибудь знает, как это сделать? Пожалуйста, я прошу вас, ребята, помочь мне здесь ТТ задача слишком сложна, и я просто новичок

Я думаю об использовании 2 таблицы здесь.таблица 1 для идентификатора сотрудника и имени сотрудника, таблица 2 для имени файла и т. д., поэтому я предполагаю, что это также будет включать 2 в то время как предложение.У меня есть идея, но я не знаю, как их все смешать.

мой код до того, как я его отредактировал, сэр Винсент, выглядит так:

if ($_SESSION[$fgmembersite->GetLoginSessionVar()] == 'sa' 
   OR $_SESSION[$fgmembersite->GetLoginSessionVar()] == 'admin')
{                                   

  $sql= "select * from gmdc_employee 
         where employee_name like '%$search%' 
         AND employee_name like '$listname%'";
} else {
  $sql = "select b.* from gmdc_user a, gmdc_employee b 
          where a.username = '".$_SESSION[$fgmembersite->GetLoginSessionVar()]."' 
          AND a.company_id = b.company_id 
          AND b.employee_name like '$listname%' 
          AND b.employee_name like '%$search%'"; 
}
$query = mysql_query("$sql ORDER BY employee_name,confirmation DESC 
                     ,file_id DESC,file_date DESC 
                      LIMIT $offset,$limit") or die ( mysql_error () );
$result = mysql_query($sql) or die (mysql_error());
$total = mysql_num_rows($result);

if(!$result || mysql_num_rows($result) <= 0)
{
  $fgmembersite->HandleError("No file found.");
  return false;
}
while ($row = mysql_fetch_assoc($query))
{
  $file_id = $row['file_id'];
  $file_desc = $row['file_description'];
  $file_date = $row['file_date'];
  $file_name = $row['file_name'];
  $file_accs = $row['folder_access'];
  $file_employee  = $row['employee_id'];
  $file_confir = $row['confirmation'];
  $file_ename = ucwords($row['employee_name']);

  $info = pathinfo($file_name);
  $file_ext = $info['extension'];

  echo '<tr><td>&nbsp;</td></tr>
        <tr class="subone"><td class="sub" width="100">'.$file_employee.'<br />
        &nbsp;</td>';
  if($_SESSION[$fgmembersite->GetLoginSessionVar()] == 'sa')
  {
    ?>
    <td class="sub" width="100">
    <a href="" onclick = javascript:newPopup('addfile.php?emp=
    <?php echo $file_employee ?>');><?php echo$file_ename?></a>
    <br />&nbsp;</td>
    <?php
  } else {
    echo '<td class="sub" width="182">'.$file_ename.'<br />&nbsp;</td>';
  }
  echo'<td  class="sub" width="218">
       <a href="'.$file_accs.$file_name.'" target="_blank" 
        style="text-decoration: underline;">'.$file_desc.'</a>
       <br />&nbsp;</td><td  class="sub" width="100">
      '.date('M d, Y',mktime(0,0,0,substr($file_date,5,2)
       ,substr($file_date,8,2),substr($file_date,0,4))).'
       <br />&nbsp;</td><td  class="sub" width="100">'.$file_confir.'
       <br />&nbsp;</td>';

  if($_SESSION[$fgmembersite->GetLoginSessionVar()] == 'sa')
  {
    if($file_confir == 'Pending' OR $file_confir == 'NotApproved')
    {
      if(isset($_GET['id']))
      {
        $fgmembersite->Delete_Db($_GET['id']);
      }
      echo '<td  class="sub" width="100">
            <a href="index.php?id='.$file_id.'">Delete</a>
            <br />&nbsp;</td>';
    }
  }
  else if($_SESSION[$fgmembersite->GetLoginSessionVar()] == 'admin')
  {
    if($file_confir == 'Pending')
      {
        if(isset($_GET['yes']))
        {
          $fgmembersite->UpdateYesDB($_GET['yes']);
          //echo "<script>location.reload();</script>";
        }
        else if(isset($_GET['no']))
        {
          $fgmembersite->UpdateNoDB($_GET['no']);
          //echo "<script>location.reload();</script>";
        }
        if (!isset($_GET['offset'])) {
          $prevoffset = 0;
        } else {
          $prevoffset = $_GET['offset'];
          echo'<td  class="sub" width="100">
          <a href="index.php?offset='.$prevoffset.'&searchfile='.$search.'
           &namelist='.$listname.'&yes='.$file_id.'">Approve</a>
           //there's a link here<br /><br />
           <a href="index.php?offset='.$prevoffset.'&searchfile='.$search.'
            &namelist='.$listname.'&no='.$file_id.'">NotApprove</a>
            //there's a link here
            &nbsp;</td> ';
      }
    }
  }?>

Просто игнорируйте все if($_SESSION[$fgmembersite->GetLoginSessionVar()] == 'admin') икак бы то ни было, это для другого вывода, так как мой файл может быть авторизован 3 разными пользователями.SA (программисты), admin (утверждающий загруженного файла) и пользователь (компания).Там также есть TD и TR, я не знаю, почему он здесь не появляется.

вывод выглядел так:

employee_id  +   employee_name  +  file_name
3            |   pichu          |  file6
3            |   pichu          |  file1
1            |   pikachu        |  file7
1            |   pikachu        |  file4
1            |   pikachi        |  file3
2            |   raichu         |  file8
2            |   raichu         |  file5
2            |   raichu         |  file2

и я хочу, чтобы мой вывод был таким:

***OUTPUT***

**employee_id        employee_name              file_name**
    3                      pichu                        file6
                                                        file1
    1                     pikachu                       file7
                                                        file4
                                                        file3
    2                     raichu                        file5
                                                        file2

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

OUTPUT

**employee_id        employee_name            file_name**
    3                      pichu                      file6
                                                      file1
    1                      pikachu                    file7
                                                      file4
                                                      file3
    2                      raichu                     file8
                                                      file5
                                                      file2

Ответы [ 3 ]

1 голос
/ 17 мая 2011

Использование структуры таблицы Vincent, скорее всего, решит вашу проблему.И чтобы получить желаемый результат, вы можете использовать один запрос, используя соединение для двух таблиц.Поэтому нет необходимости использовать два запроса.

SELECT  e.employee_id as employee_id,            //Display column for employee_id
        e.employee_name as employee_name,        
        f.file_name as file_name
  FROM employee e                                // The e is an alias for table
 INNER JOIN file f                               // The inner join will return all the rows which have same employee_id on both table 
    ON e.employee_id = f.employee_id
 ORDER BY e.employee_name, f.file_name DESC;     // Order of the result default is ASC

ОБНОВЛЕНИЕ

Я предполагаю, что у вас есть две таблицы, и структура с Винсентом такая же.Теперь этот запрос получит данные по двум таблицам.Часть соединения здесь состоит в том, что, когда employee_id на employee table имеет тот же employee_id на file table, это вернет строку.Пожалуйста, смотрите mysql join для получения дополнительной информации.Тогда порядок e.employee_id - это значение employee_id в таблице employee, поскольку порядок не указан, поэтому будет использоваться значение по умолчанию ascending.

. Тогда результатом вышеприведенного запроса может быть следующий код.

employee_id  +   employee_name  +  file_name
3            |   pichu          |  file6
3            |   pichu          |  file1
1            |   pikachu        |  file7
1            |   pikachu        |  file4
1            |   pikachi        |  file3
2            |   raichu         |  file8
2            |   raichu         |  file5
2            |   raichu         |  file2

Вы заметите, что employee_id и employee_name повторяются.Это связано с тем, что в запрос включены все значения столбцов в строке, указанной в SELECT column_name.Вы можете отфильтровать дублирующее значение в вашем php, особенно если вы сначала сохраните его в объекте, а не напрямую его печатаете.

PHP

$query = $see_the_query_above;
$result = mysql_query($query) or die(mysql_error($db));
$emp_id = "";     //This will be use to remove employee_id if its already echoed.
$emp_name = "";   //This will be use to remove employee_name if its already echoed.

echo '<table>';
echo '<tr><th>employee_id</th><th>employee_name</th><th>file_name</th></tr>';

while ($row = mysql_fetch_assoc($result)) {
    //Check $emp_id and $emp_name if same with the current, if same just print nothing or space else replace it with new.
    $emp_id = $emp_id == $row['employee_id'] ? "" : $row['employee_id']
    $emp_name = $emp_name == $row['employee_name'] ? "" : $row['employee_name'];

    echo '<tr>';
    echo '<td>'.$emp_id.'<td>';
    echo '<td>'.$emp_name.'</td>';
    echo '<td>'.$row['file_name'].'</td>';
    echo '</tr>';
}
echo '</table>';
0 голосов
/ 17 мая 2011

при условии, что вы используете MySQL и если мы установили соединение с базой данных, используя ссылку $ db:

$query = 'SELECT employee_id, employee_name FROM `employee` ORDER BY employee_name ASC';
$result = mysql_query($query) or die(mysql_error($db));

echo '<table>';
echo '<tr><th>employee_id</th><th>employee_name</th><th>file_name</th></tr>';

while ($row = mysql_fetch_assoc($result)) {
    echo '<tr>';
    echo '<td>'.$row['employee_id'].'<td>';
    echo '<td>'.$row['employee_name'].'</td>';
    echo '<td>';

    $query2 = 'SELECT file_name FROM `file` WHERE employee_id='.$row['employee_id'].' ORDER BY file_id DESC';
    $result2 = mysql_query($query2) or die(mysql_error($db));

    while ($row2 = mysql_fetch_assoc($result2)) {
        echo $row2['file_name'].'<br />';
    }

    echo '</td>';
    echo '</tr>';
}

echo '</table>';

, этот фрагмент кода будет работать.

0 голосов
/ 17 мая 2011

звучит не так уж сложно.

ТАБЛИЦА employee:
эта таблица может иметь два поля (самым простым способом): employee_id, employee_name

ТАБЛИЦА file:
эта таблица может иметь три поля: file_id, employee_id (это внешний ключ), file_name

когда файл загружен, измените его имя на этот формат: "file" + file_id

для этого имеем:

ТАБЛИЦА employee:

employee_id  |  employee_name
-----------------------------
1            |  pikachu
2            |  raichu
3            |  pichu

ТАБЛИЦА file:

file_id  |  employee_id  |  file_name
-------------------------------------
1        |  3            |  file1
2        |  2            |  file2
3        |  1            |  file3
4        |  1            |  file4
5        |  2            |  file5
6        |  3            |  file6
7        |  1            |  file7
8        |  2            |  file8

тогда их действительно легко собрать, как ты думаешь?

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