Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/283.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 为具有多个值的字段返回多个标签_Php_Mysql_Sql_Function - Fatal编程技术网

Php 为具有多个值的字段返回多个标签

Php 为具有多个值的字段返回多个标签,php,mysql,sql,function,Php,Mysql,Sql,Function,我有一个函数,它运行并从查找表中获取存储在特定表中的值的标签。当有1个值时,它会正确显示。但是,当有多个值时,它只返回第一个值。例如: Lookup table is | Tel_No| Tel_type | -------------------- | 1 | Info | | 2 | Support | | 3 | Call | Main table is | TelephoneCalls | ------------------ | 1,3

我有一个函数,它运行并从查找表中获取存储在特定表中的值的标签。当有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

谢谢你的帮助

我猜评论中提到了它,但您确实应该将模式更改为多对多关系,而不是在字段中使用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                   |
+----------------+------------------------+

电话呼叫中存储的值实际上是逗号分隔的数字吗?因为这会让事情变得更难。不是很难,但效率更低,因为你需要多次而不是一次查询。是的,它们都是逗号分隔的数字,明白了!这不是世界末日。这不是标准。您必须运行另一个查询,以获取哪些查找值适用于这些数字。我太习惯使用oracle了,以至于忘记了一些内置函数,如find_in_set。仍然不理想,但它可以工作。