简体   繁体   English

“NOT NULL”、“IS NOT NULL”不显示在表中

[英]"NOT NULL", "IS NOT NULL" does not display in the table

PROBLEM问题
Null column and Not null column does not display at the table空列和非空列不显示在表中

Explainaton说明
*I want to display all result at rank column from different database table which is Table 1 until table 4 below, but it only display for those who already have 4 result data. *我想显示来自不同数据库表(表 1 到下面的表 4)中排名列的所有结果,但它只显示那些已经有 4 个结果数据的人。 How can i achive this?我怎样才能做到这一点? Sorry im new in database field.对不起,我是数据库领域的新手。 I hope you guys can give me some reference or related *我希望你们能给我一些参考或相关*

My query我的查询

<?php
                   $sql = "SELECT virtualexam.rank.id, virtualexam.rank.username,

                   virtualexam.rank.score AS score, virtualexam1.rank.score AS 'score1', virtualexam2.rank.score AS 'score2', virtualexam3.rank.score AS 'score3',

                   SUM(virtualexam.rank.score + virtualexam1.rank.score + virtualexam2.rank.score + virtualexam3.rank.score ) AS 'total' 
                   
                   FROM virtualexam.rank
               
                   JOIN virtualexam1.rank ON (virtualexam.rank.username =  virtualexam1.rank.username) 
               
                   JOIN virtualexam2.rank ON (virtualexam2.rank.username =  virtualexam1.rank.username)
               
                  JOIN virtualexam3.rank ON (virtualexam3.rank.username =  virtualexam2.rank.username) 

                  WHERE virtualexam.rank.score IS NULL OR virtualexam.rank.score = ''
                 
                  GROUP BY virtualexam.rank.username ; ";


                  $result = $conn->query($sql);

?> ?>

my html table我的 html 表格

db.Table 1 db. 表 1

db1.Table 2 db1.表2

db2.Table 3 db2.表 3

db3.Table 4 db3.表 4

When you say just JOIN , it requires a record to exist in the joined table.当您只说JOIN ,它要求连接表中存在一条记录。 If you want it to be optional, use LEFT JOIN instead.如果您希望它是可选的,请改用LEFT JOIN Then if the joined table doesn't exist, references to columns in it will give NULL.然后,如果连接的表不存在,则对其中的列的引用将给出 NULL。 To keep your virtualexam.rank.score + virtualexam1.rank.score + virtualexam2.rank.score + virtualexam3.rank.score from returning NULL when any of the things being added are NULL, you need to use coalesce.为了防止您的virtualexam.rank.score + virtualexam1.rank.score + virtualexam2.rank.score + virtualexam3.rank.score在添加的任何内容为 NULL 时返回 NULL,您需要使用合并。 So:所以:

SELECT
    virtualexam.rank.id,
    virtualexam.rank.username,
    virtualexam.rank.score AS score,
    virtualexam1.rank.score AS 'score1',
    virtualexam2.rank.score AS 'score2',
    virtualexam3.rank.score AS 'score3',
    SUM(COALESCE(virtualexam.rank.score,0) + COALESCE(virtualexam1.rank.score,0) + COALESCE(virtualexam2.rank.score,0) + COALESCE(virtualexam3.rank.score) ) AS 'total' 
FROM virtualexam.rank
LEFT JOIN virtualexam1.rank ON (virtualexam.rank.username = virtualexam1.rank.username) 
LEFT JOIN virtualexam2.rank ON (virtualexam2.rank.username = virtualexam1.rank.username)
LEFT JOIN virtualexam3.rank ON (virtualexam3.rank.username = virtualexam2.rank.username) 
WHERE virtualexam.rank.score IS NULL OR virtualexam.rank.score = ''                 
GROUP BY virtualexam.rank.username

This still only reports users who have a virtualexam.rank entry.这仍然只报告具有 virtualexam.rank 条目的用户。 If you want to include those who don't but do have an entry in any of the other databases, you have to do:如果您想包括那些没有但在任何其他数据库中有条目的人,您必须执行以下操作:

FROM (
    SELECT DISTINCT username FROM virtualexam.rank
    UNION SELECT DISTINCT username FROM virtualexam1.rank
    UNION SELECT DISTINCT username FROM virtualexam2.rank
    UNION SELECT DISTINCT username FROM virtualexam3.rank
) AS users
LEFT JOIN virtualexam.rank ON virtualexam.rank.username=users.username
LEFT JOIN virtualexam1.rank ON virtualexam1.rank.username=users.username
LEFT JOIN virtualexam2.rank ON virtualexam2.rank.username=users.username
LEFT JOIN virtualexam3.rank ON virtualexam3.rank.username=users.username

But this is a very poor database design.但这是一个非常糟糕的数据库设计。 Put all your scores in a single table, with other fields to identify what the score is for.将您的所有分数放在一个表格中,并使用其他字段来确定分数的用途。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM