#codeigniter #activerecord #phpactiverecord
#codeigniter — инициализатор кода #активная запись #phpactiverecord phpactiverecord
Вопрос:
У меня такая ситуация, я хочу получить значение из базы данных (в этих значениях используются разделители через запятую) из более чем одной строки в зависимости от месяца и года, которые я выбираю, для более подробной информации ознакомьтесь с этим..
Мой Schedule.sql :
--- ------------ -------------------------------------
|ID |Activ_date | Do_skill |
--- ------------ -------------------------------------
| 1 | 2020-10-01 | Accountant,Medical,Photograph |
| 2 | 2020-11-01 | Medical,Photograph,Doctor,Freelancer|
| 3 | 2020-12-01 | EO,Teach,Scientist |
| 4 | 2021-01-01 | Engineering, Freelancer |
--- ------------ -------------------------------------
Мой skillqmount.sql :
---- ------------ ------------ -------
|ID |Date_skill |Skill |Price |
---- ------------ ------------ -------
| 1 | 2020-10-02 | Accountant | $ 5 |
| 2 | 2020-10-03 | Medical | $ 7 |
| 3 | 2020-10-11 | Photograph | $ 5 |
| 4 | 2020-10-12 | Doctor | $ 9 |
| 5 | 2020-10-01 | Freelancer | $ 7 |
| 6 | 2020-10-04 | EO | $ 4 |
| 7 | 2020-10-05 | Teach | $ 4 |
| 8 | 2020-11-02 | Accountant | $ 5 |
| 9 | 2020-11-03 | Medical | $ 7 |
| 10 | 2020-11-11 | Photograph | $ 5 |
| 11 | 2020-11-12 | Doctor | $ 9 |
| 12 | 2020-11-01 | Freelancer | $ 7 |
---- ------------ ------------ -------
На моем веб-сайте я хочу произвести вычисления с этими двумя таблицами. Поэтому, если на моем веб-сайте вы хотите увидеть начало с даты 2020-10-01 до 2020-11-01 для общей суммы между этими датами, я пытаюсь показать это с помощью этого кода :
Пример вывода
---- ----------- ----------- ---------
|No |Date Start |Date End |T.Amount |
---- -------- -- ----------- ---------
|1 |2020-10-01 |2020-11-01 |$ 45 | <= this amount came from $5 $7 $5 $7 $5 $9 $7
---- -------- -- ----------- ---------
Note :
Date Start : Input->post("A")
Date End : Input->post("B")
T.Amount : Total Amount based input A and B (on date)
Я попробовал этот код, чтобы получить его :
<?php
$startd = $this->input->post('A');
$endd= $this->input->post('B');
$chck = $this->db->select('Do_skill')
->where('Activ_date >=',$startd)
->where('Activ_date <',$endd)
->get('Schedule')
->row('Do_skill');
$dcek = $this->Check_model->comma_separated_to_array($chck);
$t_amount = $this->db->select_sum('price')
->where('Date_skill >=',$startd)
->where('Date_skill <',$endd)
->where_in('Skill',$dcek)
->get('skillqmount')
->row('price');
echo $t_amount; ?>
Check_model :
public function comma_separated_to_array($chck, $separator = ',')
{
//Explode on comma
$vals = explode($separator, $chck);
$count = count($vals);
$val = array();
//Trim whitespace
for($i=0;$i<=$count-1;$i ) {
$val[] .= $vals[$i];
}
return $val;
}
Моя проблема — результат $t_amount
не 45 долларов, я думаю, что в моем коде выше есть какой-то промах, пожалуйста, если есть какие-то советы, я очень ценю это…Спасибо…
Комментарии:
1. неужели ваша проблема решена?
2. T.Сумма = $5 $7 $5 $9 $7 $4 $4 $7 = 48. фильтр между 2 датами.
Ответ №1:
Ваш первый запрос возвращает только 1 строку данных.
Я думаю, вы можете сделать что-то подобное для первого запроса.
$query1 = $this->db->query("SELECT Do_skill FROM schedule WHERE activ_date >= $startd and activ_date < $startd");
$check = $query1->result_array();
$array = [];
foreach($check as $ck){
$dats = explode(',',$ck['Do_skill']);
$counter = count($dats);
for($i=0;$i<$counter;$i ){
array_push($array,$dats[$i]);
}
и вы можете использовать массив для выполнения вашего следующего запроса 🙂
Комментарии:
1. йой бро @karisma
Ответ №2:
Массив $ dcek содержит значения
Accountant,Medical,Photograph
Запрос от Codeigniter
SELECT SUM(`price`) AS `price` FROM `skillqmount`
WHERE `Date_skill` >= '2020-10-01' AND
`Date_skill` < '2020-11-01' AND
`Skill` IN('Accountant', 'Medical', 'Photograph')
который возвращает 17 — это соответствует первым трем записям в ваших данных.
Ваш первый запрос будет выдавать только одну строку, даже если диапазон дат будет соответствовать нескольким строкам.
Комментарии:
1. итак, каково ваше предложение по решению моей проблемы? Я некоторое время искал, чтобы использовать concat для объединения всех значений
Do_skill
, но я не знаю, как его использовать в этом случае. можете ли вы мне помочь?2. Какие значения идентификаторов вы использовали, чтобы получить ответ за 45 долларов?
3. просто дата, я не использую ID
4. $5 $7 $5 $7 $5 $9 $7 пришло из
Accountant Medical Photograph
10-го иMedical Photograph Doctor Freelancer
11-го месяцев, потому что ввод даты выбора начинается с Okt по ноябрь