PHP MySQL 列循环是否名称相似?

PHP MySQL Column Loop if name is similar?

我不确定这是否存在于 PHP/MySQL、

我想 return mysql 数据库中动态具有相似名称且它们为 null/"" 的多个列,然后不要 return 该行,因为事实上你不能添加重复的列名我不知道该怎么做?

我正在这样做,但正在寻找一种更动态的方式,因为我不想依赖使用数组,通过传递一串让我们说 "name" 只有这样可能吗?有点像 MySQL select "SELECT * FROM db WHERE name = 'Jack';"

$names = array("name1", "name2", "name3", "name4");

foreach ($names as $value) {

            if($row [$value] > 0){
                //
            }else{
                if($row [$value] == null){
                    //
                }else{
                    echo $row[$value];
                }
            }
        }

这里是数据库的结构——可以说下面的“”是空白的;

id category subcat name1 name2 name3 name4 name5
1  people   names  jack  bob   sue   anna  ""
2  people   names  name  name  ""    ""    ""
3  animals  ...    ..    .     .. etc 

这是我的 php mysql 查询;

$sql = "SELECT * FROM db WHERE category = 'people'"; 
    $result = $conn->query($sql);

    $names = array("name1", "name2", "name3", "name4","name5");

        while($row = $result->fetch_assoc()) {

            echo $row["subcat"]."<br>";

            foreach ($names as $value) {
                if($row [$value] > 0){
                    //
                }else{
                    if($row [$value] == null){
                        //
                    }else{
                        echo $row[$value]."<br>";
                    }
                }
            }
        }

您想从不同的列中获取多行并且行具有相似的值。但是一个值不能出现两次?并且不能为空?

你可以使用 DISTINCT 语句来检查值是否不为空,你可以在 WHERE 语句之后使用 > IS NOT NULL。所以整个 sql 语句看起来像下面的例子。

SELECT DISTINCT column_name,column_name FROM table WHERE YourColumn IS NOT NULL;

最好的方法是使用单独的 names table:

item_id name
1       jack
1       bob
1       sue
1       anna
2       name1
2       name2

那你就可以加入原来的table:

SELECT d.id, d.category, d.subcat, n.name
FROM db AS d
JOIN names AS n ON n.item_id = d.id
WHERE d.category = 'people'
ORDER BY d.id

使用您现有的结构,您可以在 PHP:

while ($row = $result->fetch_assoc()) {
    echo $row['subcat'] . "<br>";
    foreach ($row as $col => $value) {
        if (substr($col, 0, 4) == 'name' && $value != '') {
            echo $value . "<br>";
        }
    }
}

也许试试这个:

$sql = "SELECT * FROM db WHERE category = 'people'"; 
$result = $conn->query($sql);

$names = array("name1", "name2", "name3", "name4","name5");

    while($row = $result->fetch_assoc()) {

        echo $row["subcat"]."<br>";

        foreach ($names as $value) {
            if(in_array($value, $names)){
                // the value is in the names array
                echo $row[$value]."<br>";
                ...
            }else{
                // the value is not in the names array
                ...
            }
        }
    }