Php MYSQL从表的行中选择多个非空字段/列
我在下面的代码中有12列,我希望用最佳、正确和简短的方式为用户订单只选择字段表中字段不为空/0的行。所有字段均为INT,数字小于500Php MYSQL从表的行中选择多个非空字段/列,php,mysql,sql,select,Php,Mysql,Sql,Select,我在下面的代码中有12列,我希望用最佳、正确和简短的方式为用户订单只选择字段表中字段不为空/0的行。所有字段均为INT,数字小于500 $conn = mysqli_connect("localhost", "root", "","table_name") or die("error"); $sql = "SELECT dqnt_91,deal_91,dqnt_92,deal_92,dqnt_93,deal_93,dqnt_94,deal_94,dqnt_95,de
$conn = mysqli_connect("localhost", "root", "","table_name") or die("error");
$sql = "SELECT dqnt_91,deal_91,dqnt_92,deal_92,dqnt_93,deal_93,dqnt_94,deal_94,dqnt_95,deal_95,dqnt_96,deal_96 FROM table_name WHERE fid='$userid' AND COLUMNS ARE NOT EMPTY ";
$result = mysqli_query($conn, $sql);
while( $row = mysqli_fetch_array($result, MYSQLI_ASSOC)) {
$d_91 = $row['deal_91']; $d_92 = $row['deal_92']; $d_93 = $row['deal_93']; $d_94 = $row['deal_94']; $d_95 = $row['deal_95']; $d_96 = $row['deal_96'];
$qnt_91 = $row['dqnt_91']; $qnt_91 = $row['dqnt_92']; $qnt_91 = $row['dqnt_93']; $qnt_91 = $row['dqnt_94']; $qnt_91 = $row['dqnt_95']; $qnt_91 = $row['dqnt_96']; }
echo 'You have selected:'.$d_91.'for'.$deal_91.'<br>';
echo 'You have selected:'.$d_92.'for'.$deal_92.'<br>';
echo 'You have selected:'.$d_96.'for'.$deal_96.'<br>';
谢谢,除了修改数据结构之外,您在SQL中的表现不会比列出12列及其各自的条件好多少;任何更短的内容都会以清晰性为代价,所以我个人建议不要这样做。但是,如果对您的应用程序来说简洁比清晰更重要: 如果您可以添加一个视图,它可以为您提供一个简单的标志来进行测试
create view my_view as (select -- each column
, case when -- all values are present
then 1 else 0 end nonempty_flg
from -- ...)
然后,至少在呼叫应用程序之外隐藏了复杂性。如果这不是一个选项:
您可以声明这些列是小整数值。如果你可以进一步假设它们是非负的,那么你可以将它们相加并与0进行比较。如果值可能为负数,则可以对其绝对值求和
在您的示例中,列被视为字符串。如果它们实际上是CHAR或VARCHAR,您可以将它们全部合并,并根据空值检查结果。您可能需要将空值合并到现有值
但听起来您真正想要的是在查询不预先知道列集合的情况下工作的东西;这在SQL中是不可行的。我想您可以在调用程序中编写一个函数/方法/过程,在检查目录中的表列的基础上生成查询。根据什么输入,输出可能是什么样子?文本如下:you have select 98 for 22,echo也是echo'you have select:'。$dqnt_91。'for'$deal_91'。谢谢,没有负值,我可以将列设置为VARCHAR,如果这有帮助的话没有问题,或者如果方便的话,我也可以将数字替换为文本。基于这一点,你有什么建议?你认为如果…其他方法可以派上用场吗?我不确定你会用如果…其他方法做什么,但如果不知道你在想什么,我不能说它不会有帮助。我的建议是。。。正如我所说,我建议只为每一列列出一个单独的条件,因为在SQL中,这是逻辑的直接表示。如果你需要做一些不同的事情,那么你必须评估什么是最好的权衡。
create view my_view as (select -- each column
, case when -- all values are present
then 1 else 0 end nonempty_flg
from -- ...)