2014-03-27 55 views
1

我有一个函数,该函数运行并从查找表中获取存储在特定表中的值的标签。当有1个值时,它显示正确。但是,当有多个值时,它只返回第一个值。例如:为具有多个值的字段返回多个标签

Lookup table is 

| Tel_No| Tel_type | 
-------------------- 
| 1 | Info | 
| 2 | Support | 
| 3 | Call | 

Main table is 

| TelephoneCalls | 
------------------ 
| 1,3   | 
| 3    | 
| 1,2,3   | 

我在这工作的匹配值1的那一刻功能是

function getMonitoring($monitoring){ 
$query = "SELECT Tel_type FROM TelephoneCalls Where Tel_no = '$monitoring'"; 
$result9 =mysql_query($query) or die(mysql_error()); 
list($Tel_type) = mysql_fetch_array($result9, MYSQL_NUM); 
    return $Tel_type; 
       } 

我怎样才能得到它列出像下面

If 1, 3  then display  Info, Call 
If 3   display  Call 
If 1, 2, 3 display  Info, Support, Call 

感谢值任何帮助!

+0

存储在'TelephoneCalls'实际上逗号分隔的数字值是多少?因为这会让这有点难。好吧,不是很难,但效率更低,因为你必须多次查询而不是一次。 –

+0

是的,他们都是逗号分隔的数字,eek! – 5ummer5

+0

这不是世界末日。这只是不标准。您将不得不运行另一个查询来获取哪些查找值适用于这些数字。 –

回答

1

我猜这些评论会触及它,但是您应该将您的架构更改为多对多关系,而不是在字段中使用CSV值。如果你不能在此查询应该工作:

SELECT telephonecalls, GROUP_CONCAT(tel_type) 
FROM lookup_table 
LEFT JOIN main_table ON FIND_IN_SET(tel_no , replace(TelephoneCalls,' ', '')) > 0 
GROUP BY telephonecalls; 

#outputs 
+----------------+------------------------+ 
| telephonecalls | GROUP_CONCAT(tel_type) | 
+----------------+------------------------+ 
| 1,2,3   | Info,Support,Call  | 
| 1,3   | Info,Call    | 
| 3    | Call     | 
+----------------+------------------------+ 

http://sqlfiddle.com/#!2/194fd/1/0

+0

我很习惯使用oracle,所以我忘记了一些像find_in_set这样的内置函数。仍然不理想,但它的工作原理。 –