我不确定这是否存在于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>";
}
}
}
}
答案 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
...
}
}
}