Цикл по категориям массива, чтобы получить подкатегории - PullRequest
0 голосов
/ 20 февраля 2011

У меня есть три таблицы, и они выглядят так:

users_table                      categories_table         depart_table

u_id   cid  name  d_array      |  c_id   d_array       |  d_id  d_name  u_array
1      3   Jam     1,3,4       |  1      2,4           |  1    James    1,2,5
2      1   Ham     1,4,6       |  2      1,2,3         |  2    Mark     3,4
3      2   Ink     2,6,7       |  3      1,2,5         |  3    Love     1,5
4      4   Kal     4,2         |  4      4,5,6,7       |  4    Phone    1,2,4
5      3   Pol     1,5,3       |  5      7             |  5    Bags     5

В основном, cid (ID категории) взят из поста. Итак, $ c_id = $ _POST ["cid"]; Итак, мы знаем, что такое cid.

Теперь мы хотим отобразить все отделы этой категории. А потом ... Показать список пользователей в этом отделе. Итак, если $c_id = 3 Результат должен быть:

   James
       Jam
       Pol

   Mark

   Bags
      Pol

Пояснение: Поскольку c_id == 3, мы перебираем d_array, который является массивом отдела - чтобы получить массив пользователя. Теперь каждый пользователь, имеющий cid OF 3, должен быть включен только в список. Как вы можете видеть, Джеймс (первое значение в массиве cid 3) имеет Jam AND Pol, НО НЕ HAM; потому что у HAM нет cid 3.

Это было мое решение, но оно не работает.

     `$sql_myDetails = mysql_query("SELECT * FROM categories_table WHERE c_id = '$c_id'")`

or die ("<p>died 20: $sql_myDetails<br>" . mysql_error()); while($row = mysql_fetch_array($sql_myDetails)){ $c_id= $row["cid"]; $d_array = $row["d_array "]; }

     if ($d_array != ""){
    $sqlUsers = mysql_query("SELECT * FROM users_table WHERE c_id = '$c_id' AND d_array IN ($d_array)");
while($get_staff = mysql_fetch_array($sqlUsers )){
    $u_id = $get["u_id"];
    $name = $get["name"];
    }

$sqlDept = mysql_query("SELECT * FROM depart_table WHERE d_id IN ($d_array)")
or die ("<p>died 52: $sqlDept<br>" . mysql_error());
while($get = mysql_fetch_array($sqlDept)){
    $d_id = $get["d_id"];
    $d_name = $get["d_name"];
    $u_array = $get["u_array"];
    echo $d_name."<br />";
if ($u_array != ""){
$exloded_u_array = explode(",", $u_array); 
foreach($exloded_u_array as $key2 => $value2) { 
$sql_user = mysql_query("SELECT * FROM user_table WHERE u_id = '$value2'");
while($get_name = mysql_fetch_array($sql_user)){
    $user_id = $get["u_id"];
    $user_name = $get["name"];
    }
}
echo $user_name."<br />";
 }
}
}

Я пытался, он отображает категории, но отображает ВСЕХ пользователей в этом отделе. В нем должны отображаться пользователи, имеющие только c_id категории.

Пожалуйста, не могли бы вы проверить, что я делаю не так.

1 Ответ

3 голосов
/ 20 февраля 2011

Я не очень часто использую php, и я ничего не сделал, если с ним что-то вроде БД. Глядя на ваш код, шаги кажутся немного запутанными, например, если я не понимаю, вы, кажется, присваиваете несколько переменных, например $u_id, несколько раз для каждой подходящей строки, а затем никогда не используете их. В любом случае, используя вашу текущую структуру базы данных, я предлагаю вам переписать ваш код в следующем псевдокоде:

  1. Таблица категорий запросов для нужной категории
  2. Запрос таблицы пользователей для пользователей с идентификатором этой категории
  3. Таблица отделов запросов для отделов в d_array категории
...