我如何 return mysql 搜索结果,其中仅显示具有非空条目的列
How can I return mysql search results where only the columns with non-null entries are displayed
我在尝试以我想要的方式输出 mysql 搜索时遇到问题。通过大量搜索,我无法在任何地方找到我的具体问题的答案,我希望这个论坛上的人愿意提供帮助!我从逻辑上将其视为一个两步过程。
首先,我想执行 mysql 搜索,其中搜索条件选择 table 行,其中特定列具有数据:
SELECT *
FROM `mytable`
WHERE column3 = 'yes'
这给出了我的 table 的一个子集,其中只有第 3 列中包含 'yes' 的行。
现在,对于第二步,我想从此子集 table 中删除所有不包含任何信息(即为空)的列。我确信这对专业人士来说很容易,但试图削减 'null columns' 是难倒我的,而且似乎还没有在线回答。非常感谢您的帮助!
SELECT * FROM mytable WHERE column3 IS NOT NULL;
或者你这样说是什么意思?
SELECT * FROM mytable WHERE column3 = 'yes' AND column1 IS NOT NULL;
经过进一步挖掘,我终于意识到,虽然您可以使用 mysql 轻松过滤某些数据行,但动态过滤某些数据列是另一回事。我曾假设列可以像行一样被过滤。我在 2011 年 bluish 找到了一个类似问题的答案,描述了这个:
既然我更好地理解了这个概念,我仍然需要更多信息来构建将完成 link 中 bluish 描述的代码。如果我自己想出这个答案,我会编辑这个答案。相反,如果有人愿意用代码提供答案,我将不胜感激。
好的,抱歉耽搁了,感谢大家的建议。在搜索互联网论坛并尝试不同的选择之后,我终于找到了解决方案。在此解决方案中,关键是使用 array_filter() 来识别数据是否包含在数组中,或者它是否为空。这适用于一维数组,所以我首先将 mysql 数据的每一列移动到它自己的一维数组中,并使用 array_filter() 作为工具来决定哪些列将在HTML table。代码和输出如下。享受...
CODE>>>>>>>>>>>>>>>>>>>>>>>>>>
<?php
//STEP 1: Making and confirming a connection to the Database>>>>>>>>>>>>>>>>>>>>>>>>>>
echo "STEP 1: MAKING A CONNECTION TO THE MYSQL DATABASE...<BR><BR>";
//make connection
$db = mysql_connect("localhost","root","urpassword");
if (!$db) {
die("Database connection failed miserably: " . mysql_error());
} echo "Connected successfully<BR>";
//select database
$db_select = mysql_select_db("mydatabase",$db);
if (!$db_select) {
die("Database selection also failed miserably: " . mysql_error());
} echo "Database selected successfully<BR>";
//query
$result = mysql_query("SELECT * FROM employees2", $db);
if (!$result) {
die("Database query failed: " . mysql_error());
} echo "Database queried successfully<BR>";
//<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
//STEP 2 OUTPUTTING THE MYSQL SEARCH OF THE WHOLE DATABASE INCLUDING EMPTY COLUMN>>>>>>>>>>>>>>>>>>>>>>>>>>>>
?>
<HTML>
<HEAD>
<TITLE>Only showing table columns containing data</TITLE>
</HEAD>
<BODY>
<BR><p>STEP 2: PLACING THE MYSQL TABLE INTO AN HTML TABLE</P><BR>
<TABLE width="600" border="1" cellpadding="1" cellspacing="1">
<TR>
<TH>Name</TH>
<TH>Age</TH>
<TH>Position</TH>
<TH>Height</TH>
<TH>Salary</TH>
</TR>
<?php
while ($row=mysql_fetch_assoc($result)) {
echo "<TR>";
echo "<TD>".$row['Name']."</TD>";
echo "<TD>".$row['Age']."</TD>";
echo "<TD>".$row['Position']."</TD>";
echo "<TD>".$row['Height']."</TD>";
echo "<TD>".$row['Salary']."</TD>";
echo "</TR>";
} //end while
?>
</TABLE>
<!-- <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< -->
<?PHP
//STEP 3 Put mysql database into 2 dimension array: I didn't know my mysql >search wasn't in an array format already!!>>>>>>>>>>>>>
echo "<BR><BR>STEP 3: CONVERTING THE MYSQL TABLE INTO A 2-DIMENSIONNAL ARRAY<BR><BR>";
$query = mysql_query("SELECT * FROM employees2", $db);
$results = array();
while($line = mysql_fetch_assoc($query)){
$results[] = $line;
}
print_r($results);
//<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
//STEP 4 - Fetching each column as its own array>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
echo "<BR><BR><BR>STEP 4: FETCHING EACH ARRAY COLUMN AS ITS OWN ARRAY";
$query = mysql_query("SELECT * FROM employees2", $db);
$results = array();
while($line = mysql_fetch_assoc($query)){
$results[] = $line;
$Name = array_column($results, 'Name');
$Age = array_column($results, 'Age');
$Position = array_column($results, 'Position');
$Height = array_column($results, 'Height');
$Salary = array_column($results, 'Salary');
}
echo "<BR><BR>";
print_r($Name);
echo "<br>";
print_r($Age);
echo "<br>";
print_r($Position);
echo "<br>";
print_r($Height);
echo "<br>";
print_r($Salary);
echo "<br>";
//<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
//STEP 5 - Identifying if individual column arrays contain data>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
echo "<BR><BR>STEP 5: CONFIRMING THAT YOU CAN IDENTIFY IF A COLUMN SEPARATED INTO ITS OWN ARRAY IS EMPTY<BR><BR>";
$query = mysql_query("SELECT * FROM employees2", $db);
$results = array();
while($line = mysql_fetch_assoc($query)){
$results[] = $line;
$Name = array_column($results, 'Name');
$Age = array_column($results, 'Age');
$Position = array_column($results, 'Position');
$Height = array_column($results, 'Height');
$Salary = array_column($results, 'Salary');
}
if(array_filter($Name)) {
echo "contains at least one non-empty element<BR>";} else echo "is empty<BR>";
if(array_filter($Age)) {
echo "contains at least one non-empty element<BR>";} else echo "is empty<BR>";
if(array_filter($Position)) {
echo "contains at least one non-empty element<BR>";} else echo "is empty<BR>";
if(array_filter($Height)) {
echo "contains at least one non-empty element<BR>";} else echo "is empty<BR>";
if(array_filter($Salary)) {
echo "contains at least one non-empty element<BR>";} else echo "is empty<BR>";
//<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
?>
<!-- STEP 6 - Creating table that only displays columns with data>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> -->
<BR><p>STEP 6: CREATING AN HTML TABLE THAT ONLY DISPLAYS COLUMNS WITH DATA</P><BR>
<TABLE width="500" border="1" cellpadding="1" cellspacing="1">
<?php
$query = mysql_query("SELECT * FROM employees2", $db);
$results = array();
while($line = mysql_fetch_assoc($query)){
$results[] = $line;
$Name = array_column($results, 'Name');
$Age = array_column($results, 'Age');
$Position = array_column($results, 'Position');
$Height = array_column($results, 'Height');
$Salary = array_column($results, 'Salary');
}
echo "<TR>";
if(array_filter($Name)) {echo "<TH>Name</TH>";}
if(array_filter($Age)){echo "<TH>Age</TH>";}
if(array_filter($Position)){echo "<TH>Position</TH>";}
if(array_filter($Height)){echo "<TH>Height</TH>";}
if(array_filter($Salary)){echo "<TH>Salary</TH>";}
echo "</TR>";
$query = mysql_query("SELECT * FROM employees2", $db);
while($line = mysql_fetch_assoc($query)){
echo "<TR>";
if(array_filter($Name)) {echo "<TD>".$line['Name']."</TD>";}
if(array_filter($Age)) {echo "<TD>".$line['Age']."</TD>";}
if(array_filter($Position)) {echo "<TD>".$line['Position']."</TD>";}
if(array_filter($Height)) {echo "<TD>".$line['Height']."</TD>";}
if(array_filter($Salary)) {echo "<TD>".$line['Salary']."</TD>";}
echo "</TR>";
}
?>
</TABLE>
<BR><BR><BR><BR>
</BODY>
</HTML>
<?php
//closing mysql database
mysql_close($db);
?>
CODE<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
OUTPUT>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
STEP 1: MAKING A CONNECTION TO THE MYSQL DATABASE...
Connected successfully
Database selected successfully
Database queried successfully
STEP 2: PLACING THE MYSQL TABLE INTO AN HTML TABLE
Name Age Position Height Salary
Chris Mogan 25 Assistant Programmer 170000
Emily Grant 25 Accountant 120000
James Daniel 27 Lead Programmer 210000
Jessica Pam 28 Group Head 250000
Mike Pablo 23 Head Designer 200000
Nick Meyers 24 Assistant Designer 150000
STEP 3: CONVERTING THE MYSQL TABLE INTO A 2-DIMENSIONNAL ARRAY
Array ( [0] => Array ( [Name] => Chris Mogan [Age] => 25 [Position] => Assistant Programmer [Height] => [Salary] => 170000 ) [1] => Array ( [Name] => Emily Grant [Age] => 25 [Position] => Accountant [Height] => [Salary] => 120000 ) [2] => Array ( [Name] => James Daniel [Age] => 27 [Position] => Lead Programmer [Height] => [Salary] => 210000 ) [3] => Array ( [Name] => Jessica Pam [Age] => 28 [Position] => Group Head [Height] => [Salary] => 250000 ) [4] => Array ( [Name] => Mike Pablo [Age] => 23 [Position] => Head Designer [Height] => [Salary] => 200000 ) [5] => Array ( [Name] => Nick Meyers [Age] => 24 [Position] => Assistant Designer [Height] => [Salary] => 150000 ) )
STEP 4: FETCHING EACH ARRAY COLUMN AS ITS OWN ARRAY
Array ( [0] => Chris Mogan [1] => Emily Grant [2] => James Daniel [3] => Jessica Pam [4] => Mike Pablo [5] => Nick Meyers )
Array ( [0] => 25 [1] => 25 [2] => 27 [3] => 28 [4] => 23 [5] => 24 )
Array ( [0] => Assistant Programmer [1] => Accountant [2] => Lead Programmer [3] => Group Head [4] => Head Designer [5] => Assistant Designer )
Array ( [0] => [1] => [2] => [3] => [4] => [5] => )
Array ( [0] => 170000 [1] => 120000 [2] => 210000 [3] => 250000 [4] => 200000 [5] => 150000 )
STEP 5: CONFIRMING THAT YOU CAN IDENTIFY IF A COLUMN SEPARATED INTO ITS OWN ARRAY IS EMPTY
contains at least one non-empty element
contains at least one non-empty element
contains at least one non-empty element
is empty
contains at least one non-empty element
STEP 6: CREATING AN HTML TABLE THAT ONLY DISPLAYS COLUMNS WITH DATA
Name Age Position Salary
Chris Mogan 25 Assistant Programmer 170000
Emily Grant 25 Accountant 120000
James Daniel 27 Lead Programmer 210000
Jessica Pam 28 Group Head 250000
Mike Pablo 23 Head Designer 200000
Nick Meyers 24 Assistant Designer 150000
OUTPUT<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
我在尝试以我想要的方式输出 mysql 搜索时遇到问题。通过大量搜索,我无法在任何地方找到我的具体问题的答案,我希望这个论坛上的人愿意提供帮助!我从逻辑上将其视为一个两步过程。
首先,我想执行 mysql 搜索,其中搜索条件选择 table 行,其中特定列具有数据:
SELECT *
FROM `mytable`
WHERE column3 = 'yes'
这给出了我的 table 的一个子集,其中只有第 3 列中包含 'yes' 的行。
现在,对于第二步,我想从此子集 table 中删除所有不包含任何信息(即为空)的列。我确信这对专业人士来说很容易,但试图削减 'null columns' 是难倒我的,而且似乎还没有在线回答。非常感谢您的帮助!
SELECT * FROM mytable WHERE column3 IS NOT NULL;
或者你这样说是什么意思?
SELECT * FROM mytable WHERE column3 = 'yes' AND column1 IS NOT NULL;
经过进一步挖掘,我终于意识到,虽然您可以使用 mysql 轻松过滤某些数据行,但动态过滤某些数据列是另一回事。我曾假设列可以像行一样被过滤。我在 2011 年 bluish 找到了一个类似问题的答案,描述了这个:
既然我更好地理解了这个概念,我仍然需要更多信息来构建将完成 link 中 bluish 描述的代码。如果我自己想出这个答案,我会编辑这个答案。相反,如果有人愿意用代码提供答案,我将不胜感激。
好的,抱歉耽搁了,感谢大家的建议。在搜索互联网论坛并尝试不同的选择之后,我终于找到了解决方案。在此解决方案中,关键是使用 array_filter() 来识别数据是否包含在数组中,或者它是否为空。这适用于一维数组,所以我首先将 mysql 数据的每一列移动到它自己的一维数组中,并使用 array_filter() 作为工具来决定哪些列将在HTML table。代码和输出如下。享受...
CODE>>>>>>>>>>>>>>>>>>>>>>>>>>
<?php
//STEP 1: Making and confirming a connection to the Database>>>>>>>>>>>>>>>>>>>>>>>>>>
echo "STEP 1: MAKING A CONNECTION TO THE MYSQL DATABASE...<BR><BR>";
//make connection
$db = mysql_connect("localhost","root","urpassword");
if (!$db) {
die("Database connection failed miserably: " . mysql_error());
} echo "Connected successfully<BR>";
//select database
$db_select = mysql_select_db("mydatabase",$db);
if (!$db_select) {
die("Database selection also failed miserably: " . mysql_error());
} echo "Database selected successfully<BR>";
//query
$result = mysql_query("SELECT * FROM employees2", $db);
if (!$result) {
die("Database query failed: " . mysql_error());
} echo "Database queried successfully<BR>";
//<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
//STEP 2 OUTPUTTING THE MYSQL SEARCH OF THE WHOLE DATABASE INCLUDING EMPTY COLUMN>>>>>>>>>>>>>>>>>>>>>>>>>>>>
?>
<HTML>
<HEAD>
<TITLE>Only showing table columns containing data</TITLE>
</HEAD>
<BODY>
<BR><p>STEP 2: PLACING THE MYSQL TABLE INTO AN HTML TABLE</P><BR>
<TABLE width="600" border="1" cellpadding="1" cellspacing="1">
<TR>
<TH>Name</TH>
<TH>Age</TH>
<TH>Position</TH>
<TH>Height</TH>
<TH>Salary</TH>
</TR>
<?php
while ($row=mysql_fetch_assoc($result)) {
echo "<TR>";
echo "<TD>".$row['Name']."</TD>";
echo "<TD>".$row['Age']."</TD>";
echo "<TD>".$row['Position']."</TD>";
echo "<TD>".$row['Height']."</TD>";
echo "<TD>".$row['Salary']."</TD>";
echo "</TR>";
} //end while
?>
</TABLE>
<!-- <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< -->
<?PHP
//STEP 3 Put mysql database into 2 dimension array: I didn't know my mysql >search wasn't in an array format already!!>>>>>>>>>>>>>
echo "<BR><BR>STEP 3: CONVERTING THE MYSQL TABLE INTO A 2-DIMENSIONNAL ARRAY<BR><BR>";
$query = mysql_query("SELECT * FROM employees2", $db);
$results = array();
while($line = mysql_fetch_assoc($query)){
$results[] = $line;
}
print_r($results);
//<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
//STEP 4 - Fetching each column as its own array>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
echo "<BR><BR><BR>STEP 4: FETCHING EACH ARRAY COLUMN AS ITS OWN ARRAY";
$query = mysql_query("SELECT * FROM employees2", $db);
$results = array();
while($line = mysql_fetch_assoc($query)){
$results[] = $line;
$Name = array_column($results, 'Name');
$Age = array_column($results, 'Age');
$Position = array_column($results, 'Position');
$Height = array_column($results, 'Height');
$Salary = array_column($results, 'Salary');
}
echo "<BR><BR>";
print_r($Name);
echo "<br>";
print_r($Age);
echo "<br>";
print_r($Position);
echo "<br>";
print_r($Height);
echo "<br>";
print_r($Salary);
echo "<br>";
//<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
//STEP 5 - Identifying if individual column arrays contain data>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
echo "<BR><BR>STEP 5: CONFIRMING THAT YOU CAN IDENTIFY IF A COLUMN SEPARATED INTO ITS OWN ARRAY IS EMPTY<BR><BR>";
$query = mysql_query("SELECT * FROM employees2", $db);
$results = array();
while($line = mysql_fetch_assoc($query)){
$results[] = $line;
$Name = array_column($results, 'Name');
$Age = array_column($results, 'Age');
$Position = array_column($results, 'Position');
$Height = array_column($results, 'Height');
$Salary = array_column($results, 'Salary');
}
if(array_filter($Name)) {
echo "contains at least one non-empty element<BR>";} else echo "is empty<BR>";
if(array_filter($Age)) {
echo "contains at least one non-empty element<BR>";} else echo "is empty<BR>";
if(array_filter($Position)) {
echo "contains at least one non-empty element<BR>";} else echo "is empty<BR>";
if(array_filter($Height)) {
echo "contains at least one non-empty element<BR>";} else echo "is empty<BR>";
if(array_filter($Salary)) {
echo "contains at least one non-empty element<BR>";} else echo "is empty<BR>";
//<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
?>
<!-- STEP 6 - Creating table that only displays columns with data>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> -->
<BR><p>STEP 6: CREATING AN HTML TABLE THAT ONLY DISPLAYS COLUMNS WITH DATA</P><BR>
<TABLE width="500" border="1" cellpadding="1" cellspacing="1">
<?php
$query = mysql_query("SELECT * FROM employees2", $db);
$results = array();
while($line = mysql_fetch_assoc($query)){
$results[] = $line;
$Name = array_column($results, 'Name');
$Age = array_column($results, 'Age');
$Position = array_column($results, 'Position');
$Height = array_column($results, 'Height');
$Salary = array_column($results, 'Salary');
}
echo "<TR>";
if(array_filter($Name)) {echo "<TH>Name</TH>";}
if(array_filter($Age)){echo "<TH>Age</TH>";}
if(array_filter($Position)){echo "<TH>Position</TH>";}
if(array_filter($Height)){echo "<TH>Height</TH>";}
if(array_filter($Salary)){echo "<TH>Salary</TH>";}
echo "</TR>";
$query = mysql_query("SELECT * FROM employees2", $db);
while($line = mysql_fetch_assoc($query)){
echo "<TR>";
if(array_filter($Name)) {echo "<TD>".$line['Name']."</TD>";}
if(array_filter($Age)) {echo "<TD>".$line['Age']."</TD>";}
if(array_filter($Position)) {echo "<TD>".$line['Position']."</TD>";}
if(array_filter($Height)) {echo "<TD>".$line['Height']."</TD>";}
if(array_filter($Salary)) {echo "<TD>".$line['Salary']."</TD>";}
echo "</TR>";
}
?>
</TABLE>
<BR><BR><BR><BR>
</BODY>
</HTML>
<?php
//closing mysql database
mysql_close($db);
?>
CODE<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
OUTPUT>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
STEP 1: MAKING A CONNECTION TO THE MYSQL DATABASE...
Connected successfully
Database selected successfully
Database queried successfully
STEP 2: PLACING THE MYSQL TABLE INTO AN HTML TABLE
Name Age Position Height Salary
Chris Mogan 25 Assistant Programmer 170000
Emily Grant 25 Accountant 120000
James Daniel 27 Lead Programmer 210000
Jessica Pam 28 Group Head 250000
Mike Pablo 23 Head Designer 200000
Nick Meyers 24 Assistant Designer 150000
STEP 3: CONVERTING THE MYSQL TABLE INTO A 2-DIMENSIONNAL ARRAY
Array ( [0] => Array ( [Name] => Chris Mogan [Age] => 25 [Position] => Assistant Programmer [Height] => [Salary] => 170000 ) [1] => Array ( [Name] => Emily Grant [Age] => 25 [Position] => Accountant [Height] => [Salary] => 120000 ) [2] => Array ( [Name] => James Daniel [Age] => 27 [Position] => Lead Programmer [Height] => [Salary] => 210000 ) [3] => Array ( [Name] => Jessica Pam [Age] => 28 [Position] => Group Head [Height] => [Salary] => 250000 ) [4] => Array ( [Name] => Mike Pablo [Age] => 23 [Position] => Head Designer [Height] => [Salary] => 200000 ) [5] => Array ( [Name] => Nick Meyers [Age] => 24 [Position] => Assistant Designer [Height] => [Salary] => 150000 ) )
STEP 4: FETCHING EACH ARRAY COLUMN AS ITS OWN ARRAY
Array ( [0] => Chris Mogan [1] => Emily Grant [2] => James Daniel [3] => Jessica Pam [4] => Mike Pablo [5] => Nick Meyers )
Array ( [0] => 25 [1] => 25 [2] => 27 [3] => 28 [4] => 23 [5] => 24 )
Array ( [0] => Assistant Programmer [1] => Accountant [2] => Lead Programmer [3] => Group Head [4] => Head Designer [5] => Assistant Designer )
Array ( [0] => [1] => [2] => [3] => [4] => [5] => )
Array ( [0] => 170000 [1] => 120000 [2] => 210000 [3] => 250000 [4] => 200000 [5] => 150000 )
STEP 5: CONFIRMING THAT YOU CAN IDENTIFY IF A COLUMN SEPARATED INTO ITS OWN ARRAY IS EMPTY
contains at least one non-empty element
contains at least one non-empty element
contains at least one non-empty element
is empty
contains at least one non-empty element
STEP 6: CREATING AN HTML TABLE THAT ONLY DISPLAYS COLUMNS WITH DATA
Name Age Position Salary
Chris Mogan 25 Assistant Programmer 170000
Emily Grant 25 Accountant 120000
James Daniel 27 Lead Programmer 210000
Jessica Pam 28 Group Head 250000
Mike Pablo 23 Head Designer 200000
Nick Meyers 24 Assistant Designer 150000
OUTPUT<<<<<<<<<<<<<<<<<<<<<<<<<<<<<