Я вытаскиваю данные из таблицы под названием диспетчер задач. Один из столбцов содержит «assigned_user_id» и может встречаться несколько раз.
Я пытаюсь выяснить, как добавить последовательные номера, где заданный_user_id такой же (дубликат).
Но я действительно не знаю, с чего начать.
Внутри моего цикла while у меня есть счетчик, который подсчитывает дубликаты, и я пытался поиграть с ним, но не смог заставить его работать.
И я не знаю, правильный ли это путь.
Счетчик внутри цикла:
$CountOccurence = $conn->prepare("SELECT COUNT(task_assigned_user) FROM taskmanager WHERE task_assigned_user = ?");
$CountOccurence->bind_param("i", $gettaskassigneduser);
$CountOccurence->execute();
$CountOccurence->bind_result($total);
while ($CountOccurence->fetch()) {
echo "(".$total.")";
}
$CountOccurence->close();
Это дает:
Normal sequential counter Assigneduserid **sequential by assigned_user_id**
1 1 2 ($total)
2 2 2 ($total)
3 2 2 ($total)
4 4 1 ($total)
5 1 2 ($total)
То, что я хотел бы иметь, это:
Normal sequential counter Assigneduserid **sequential by assigned_user_id**
1 1 1
2 2 1
3 2 2
4 4 1
5 1 2
Может кто-нибудь, пожалуйста, помогите мне или укажите мне направление, в котором я могу посмотреть. Спасибо.
Не могли бы вы уточнить. Я просмотрел array_count_values перед своим вопросом, но не мог понять, как считать 1, 2 уникальными для каждого Assigneduserid. Я получил тот же результат, просто отображая общее количество, кроме каждого Assigneduserid.
Вы не выполняете запрос подсчета внутри другого цикла, не так ли??? Если это так, я бы порекомендовал JOIN или что-то еще, чтобы уменьшить общее количество обращений к базе данных.
Я. Потому что я пытался получить результат выше. Но пока не повезло. Даже с array_count_values.
Просто добавьте идентификаторы пользователей в массив, пока вы перебираете данные, а затем вы можете использовать array_count_values
, чтобы легко определить, сколько раз каждый из них встречался до сих пор.
В первой итерации цикла вы добавляете AUid 1
в свой массив, затем array_count_values
вернет вам массив [1 => 1]
. Таким образом, вы используете свой AUid 1
в качестве ключа для доступа к значению 1
и выводите его в свой 3-й столбец.
Во второй итерации цикла вы добавляете AUid 2
в свой массив. Тогда array_count_values
вернется [1 => 1, 2 => 1]
. Теперь вы используете AUid 2
для доступа к этому значению 1
и выводите его в свой 3-й столбец.
В третьей итерации цикла вы добавляете еще один AUid 2
в свой массив. Тогда array_count_values
вернется [1 => 1, 2 => 2]
. Теперь вы используете AUid 2
для доступа к этому значению 2
и выводите его в свой 3-й столбец.
И так далее ...
Мне очень жаль CBroe, но я не знаю, как это сделать. Как только я использую array_count_values, отображается ошибка. Может считать только целое число или строку. Есть ли шанс, что вы можете взглянуть на мой код здесь?: (Строка 181 - это то, где я хотел бы получить последовательный результат - это нормально, если вы тоже не хотите) jsfiddle.net/MauiRiis/5fv1mkxt
Я обновил код. Строка 192 получила массив array_count_values (значение массива находится в строке 113. Что отображает: Предупреждение: array_count_values(): Может подсчитывать только значения STRING и INTEGER! в /volume1/WEB/test/taskmanager.php в строке 220 Array ([34] => 1 [30] => 1 [2] => 2 [35] => 1 )
Пожалуйста, поделитесь URL-адресом текущей версии вашей скрипки, потому что jsfiddle.net/MauiRiis/5fv1mkxt по-прежнему нигде не содержит array_count_values
.
Пытаюсь снова. array_count находится в строке 122. Значение массива ($gettaskassigneduser) находится в строке 43 — jsfiddle.net/MauiRiis/5fv1mkxt/4
Вы пытаетесь использовать $gettaskassigneduser
как массив и скалярное значение, и то, и другое одновременно не имеет смысла. Если это массив, то такие вещи, как $showresponsible->bind_param("i", $gettaskassigneduser);
и if ($gettaskassigneduser != $Userid)
, не имеют особого смысла. Используйте другое имя переменной для массива.
Я попытался изменить $gettaskassigneduser = $row["task_assigned_user"]; to $countassigneduser[] = $row["task_assigned_user"]; не помогло. Та же ошибка. Извини. Я немного потерялся здесь. Это не в моей лиге.
$countassigneduser — это всего лишь 2,4,56,22,45,24 и т. д. Значит, в array_count_arrays отсутствует компонент?
Что ты имеешь в виду, "отсутствует компонент"?
Это также выглядит так (jsfiddle - это нет, хорошее место для представления PHP-кода, без подсветки синтаксиса, трудно читаемое), вы только вызываете функцию после в цикле - это, конечно, не имеет смысла, вам нужно подсчитать количество вхождений Текущий , в течение цикл.
Думаю, вы должны ударить по нему. Извини. print_r($countassigneduser); дает = Массив ([0] => 34 [1] => 30 [2] => 2 [3] => [4] => 2 [5] => 35) 6 Но $arr = array_count_values($countassigneduser) ; print_r ($ обр); дает ошибку.
Я не знаю, где поделиться. Вставить?: pastebin.com/Aan02h9t
Результат внутри цикла. ibb.co/4RhHz1d
Правильный отступ в коде значительно облегчит чтение...
Замените часть, в которой вы в данный момент вызываете array_count_values и печатаете результат, на var_dump($countassigneduser);
, чтобы мы могли видеть, какие значения на самом деле находятся там на данный момент.
Но единственная строка, в которую вы добавляете элементы, выглядит как $countassigneduser[] = $row["task_assigned_user"];
, так что это должно означать, что тогда $row["task_assigned_user"]
не содержит фактического значения идентификатора. Разве не все ваши задачи имеют назначены пользователем? Если да, то это то, что вы должны были упомянуть!
Только тогда добавьте элемент для текущей записи, если этот назначенный пользователь действительно существует - if ($row["task_assigned_user"]) { $countassigneduser[] = $row["task_assigned_user"]; }
. А в том месте, где вы хотите вывести этот порядковый номер, должно стоять if ($row["task_assigned_user"]) { echo array_count_values($countassigneduser)[$row["task_assigned_user"]]; }
то.
Вот маг столов. ibb.co/1sB2HSV — task_assigned_user не всегда заполняется. Извините, если какой-то информации не было. Не специально. Я действительно новичок в php.
Так это было только потому, что в столбце могла быть пустая ячейка. Я не думал об этом.
Просто добавьте идентификаторы пользователей в массив, затем вы можете использовать
array_count_values
, чтобы легко определить, сколько раз каждый из них встречался до сих пор.