mysql跨表查询所有不为空的列的值的对象

跨表查询mysql数据库的两张表,其中一张表有多个列的值为空,具体几个列为空不定。
我需要查询出所有不为空的列的值并返回。我能做到的是查询到所有的列包含空对象。我无法排除不为空的列的对象
下面是我的表及查询的具体情况

img

$sql="SELECT i.wid,i.iName,i.introduce,d.* FROM ItemList i,detailsImg d WHERE d.did=i.wid AND did='$wid'";


查询结果

img


需要红色下划线的值,不被查询到

let list
list = JSON.parse(xhr.responseText);
// list = [{id: 1, listImg11: 'aaa', listImg12: ''}]
list = list.map(item => Object.keys(item).reduce((total, subItem) => {
    if (item[subItem]) {
        total[subItem] = item[subItem]
    }
    return total
}, {}));
console.log(list)

SQL应该是做不到你说的这个需求,你可以在转成json的时候选择不序列化值为空或者空字符串的字段

读数据前筛选一下,看是不是空就行了。
在你的

if (xhr.readyState===4&&xhr.status===200){
        let list=JSON.parse(xhr.responseText);


后面加上


    list = list.filter(item => item.iName && item.introduce && item.bigImg && item.listImg1 && item.listImg2);

判断一下你试试。

如果列的个数不固定的那就很难做到,除非你确定的列的个数和名称,然后一个一个判断列是否为空 where listimg1 is not null and listimg2is not null....... 。又或者你可以再查询出来后再做处理也可以的。

可以通过使用 IS NOT NULL 运算符来查询非空列的值。例如:

$sql="SELECT i.wid,i.iName,i.introduce,d.* 
FROM ItemList i 
JOIN detailsImg d 
ON d.did=i.wid 
WHERE d.did='$wid' AND (i.wid IS NOT NULL OR i.iName IS NOT NULL OR i.introduce IS NOT NULL)";



这将返回所有非空的 wid,iName 和 introduce 列的值。