跨表查询mysql数据库的两张表,其中一张表有多个列的值为空,具体几个列为空不定。
我需要查询出所有不为空的列的值并返回。我能做到的是查询到所有的列包含空对象。我无法排除不为空的列的对象
下面是我的表及查询的具体情况
$sql="SELECT i.wid,i.iName,i.introduce,d.* FROM ItemList i,detailsImg d WHERE d.did=i.wid AND did='$wid'";
查询结果
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 列的值。