Aries
Aries

Reputation: 301

get the column name where the data was found in MySQL

is it possible to get the Column name where a particulare data was found without looping through the result, maybe by PDO? or is there another way to do this in mySQL?

the example show only 3 columns but for my table i may have up to 30 columns need to be check

if i have a table, table1 and want to find the column(s) where 'x' was found

+----+------+------+------+
| id | Col1 | Col2 | Col3 |
+----+------+------+------+
|  0 | x    | b    | x    |
|  1 | x    | x    | f    |
|  2 | d    | x    | g    |
|  3 | h    | j    | k    |
+----+------+------+------+

currentyl i run a Select then loop to each row and check each row column if data is 'x'

$query= "SELECT * FROM table1 WHERE (Col1='x' OR Col2='x' OR Col3='x')"
$result=mysql_query($query);
$foundCols = array();
$rowCnt = 0;
while ($row = mysql_fetch_assoc($result)) {
  $tmpArr = array();
  if ($row['Col1'] == 'x') {
     $tmpArr[] = 'Col1';
  }
  if ($row['Col2'] == 'x') {
     $tmpArr[] = 'Col2';
  }
  if ($row['Col3'] == 'x') {
     $tmpArr[] = 'Col3';
  }
  $foundCols[$rowCnt] = $tmpArr;
  $rowCnt = $rowCnt+1
}

thank you

Upvotes: 1

Views: 147

Answers (1)

Petah
Petah

Reputation: 46040

Try this:

while ($row = mysql_fetch_assoc($result)) {
    ...
    foreach (array('Col1', 'Col2', 'Col3') as $key) {
        if ($row[$key] == 'x') {
            $tmpArr[] = $key;
        }
    }
    ...
}

Upvotes: 5

Related Questions