php - 查询返回空值

标签 php mysql ajax

我有 3 个关于药物和库存的表格。第一个表是一个简单的 idmed_name,它被称为 medication

第二张表是关于每种药物以及我们有多少药物。该表名为 med_pharmacy

第三个表是我们从每种药物中给予的量。它被称为consultation_med

现在,我创建了一个 AJAX 请求,因此当我们想要给患者提供一些药丸时,在添加到数据库之前查看是否还有药丸。如果还有,我会回显 good,如果没有,我会回显 exceeded

这是表格:

enter image description here

我的问题是,在初始化时,我的意思是,当我们在每个示例中获得一些具有 med_id = 16 的药物时,我将在表 2 中添加一个新行,但不包括表 3,因为我们仍然没有给任何患者服用任何药物。

因此,当我第一次对每种药物使用以下脚本时,按钮 id=add_more 将保持禁用状态,因为查询返回 null,而表 3 至少没有一个记录该药物。因此,如果我第一次需要向患者分发 20 粒药片,即使我已经从医生处获得了 100 粒药片,我也将无法单击该按钮。

我该如何解决这个问题?我是否应该在表 3 上的 given_quantity 字段中添加一个填充 0 的空行,每次新一包药物到来时,这个问题就会得到解决?

var calculate = function()
{
  var quant = $('#medication_quantity').val();
  var med_p_id = $("#medication_id").val();
  console.log(med_p_id)
  $.ajax({
    url: '../php/ensureQuantity.php',
    type: 'POST',
    data: { quant: quant, mid: med_p_id},
    dataType: 'TEXT',
    success:function(resp)
    {
      console.log(resp);
      if(resp=="exceed")
      {
        $("#add_more").prop('disabled', true);
        $("#danger_message").show();
      }
      else
      {
        $("#add_more").prop('disabled', false);
        $("#danger_message").hide();
      }
    },
    error:function(resp)
    {
      console.log(resp);
    }
  })
}

使用以下 PHP 代码:

$cid = $_SESSION['clinic_id'];
$mid = $_POST['mid'];
$quant = $_POST['quant'];
$still=0;
$ensureQuantity = "SELECT
t1.med_pharmacy_id, t1.med_id, 
sum(t2.given_quantity) as given_pills,
t1.med_tablet - ((sum(t2.given_quantity)*t1.med_tablet)/t1.med_pill) as still_tablets,
(t1.med_pill-sum(t2.given_quantity)) as still_pills
FROM med_pharmacy t1, consultation_med t2, medication t3 WHERE (t1.med_pharmacy_id = t2.med_pharmacy_id AND t1.med_id=t3.med_id
AND t1.clinic_id=:cid AND t1.med_pharmacy_id = :mid) 

GROUP BY t1.med_pharmacy_id, t1.med_id,t3.med_name, t1.med_expiry,t1.med_barcode,t1.med_tablet,t1.med_pill,t1.med_received";
$execEnsureQuantity = $conn->prepare($ensureQuantity);
$execEnsureQuantity->bindValue(':cid', $cid);
$execEnsureQuantity->bindValue(':mid', $mid);
$execEnsureQuantity->execute();

$res = $execEnsureQuantity->fetch();

if($res['still_pills']==null || $res['still_pills']=="")
{
    $still = 0;
}
else
{
    $still = $res['still_pills'];
}
if($quant>$still)
{
    echo "exceed";
}
else
{
    echo "good";
}

最佳答案

我已经找到了解决方案,如下:

SELECT t1.med_id, 
t1.med_pharmacy_id,
t3.med_name,
t1.med_expiry, 
t1.med_barcode, 
t1.med_tablet, 
t1.med_pill, 
t1.med_received,
sum(t2.given_quantity) as given_pills,
t1.med_tablet - ((ifnull(sum(t2.given_quantity),0)*t1.med_tablet)/t1.med_pill) as still_tablets,
(t1.med_pill-sum(t2.given_quantity)) as still_pills
FROM med_pharmacy t1
LEFT JOIN consultation_med t2 USING (med_pharmacy_id,clinic_id)
LEFT JOIN medication t3 USING (med_id,clinic_id)
WHERE t1.clinic_id=:cid and t1.med_pharmacy_id=:mid  GROUP BY t1.med_pharmacy_id, t1.med_expiry,t1.med_barcode,t1.med_tablet,t1.med_pill,t1.med_received

并将 jQuery 脚本更改为:

var calculate = function()
{
  var quant = $('#medication_quantity').val();
  var med_p_id = $("#medication_id").val();
  console.log(med_p_id)
  $.ajax({
    url: '../php/ensureQuantity.php',
    type: 'POST',
    data: { quant: quant, mid: med_p_id},
    dataType: 'JSON',
    success:function(result)
    {

      var remaining = result['still_pills'];
      if(remaining == null)
      {
        remaining = result['med_pill'];
      }
      if(quant>parseInt(remaining))
      {
        //console.log('1* Quant:'+quant+'_'+remaining);
        $("#add_more").prop('disabled', true);
        $("#danger_message").show();
      }
      else
      {
        console.log('2* Quant:'+quant+'_'+remaining);
        $("#add_more").prop('disabled', false);
        $("#danger_message").hide();
      }
      // if(resp=="exceed")
      // {
      //   $("#add_more").prop('disabled', true);
      //   $("#danger_message").show();
      // }
      // else
      // {
      //   $("#add_more").prop('disabled', false);
      //   $("#danger_message").hide();
      // }
    },
    error:function(result)
    {
      console.log(result);
    }
  })
}

$(document).ready(function()
{
  $('#medication_quantity').on('keyup', calculate);
  $('#medication_id').on('change', calculate);
})

关于php - 查询返回空值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45182083/

相关文章:

javascript - 缩小尺寸的图像在 Chrome 中运行缓慢

php - 在下拉框中进行选择后显示文本值

php - gnupg 与 php 抛出 "could not init keylist"

PHP注解库

c# - 错误 - 无法添加或更新子行 : a foreign key constraint fails

c# - UpdatePanel 与 UploadFile 控件不能很好地工作

php - Joomla 组件中的 AJAX 函数调用

PHP/MySQL 错误

php - Mysql查询IFEXIST不返回任何结果

mysql - 计算嵌套选择结果并总结- SQL