PHP MySQL列循环,如果名称相似?

时间:2015-02-13 01:19:31

标签: php mysql loops foreach

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

我希望在mysql数据库中返回多个具有相似名称的列,并且它们为null /""然后不要返回该行,因为您无法添加重复的列名称,我不知道该怎么做?

我这样做但是寻找一种更有活力的方式因为我不想依赖使用数组,通过一串让我们说" 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>";
                    }
                }
            }
        }

3 个答案:

答案 0 :(得分:1)

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

这可以使用DISTINCT语句并检查值是否为null,您可以在WHERE语句&gt;之后使用不是空的。所以整个sql语句如下所示。

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

答案 1 :(得分:1)

执行此操作的最佳方法是使用单独的names表:

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

然后你可以将它加入原始表:

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>";
        }
    }
}

答案 2 :(得分:-1)

也许试试这个:

$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
                ...
            }
        }
    }