我有一个用来自VoIP公司的C#/ .NET编写的闭源软件,该软件无法自定义并希望使用PHP创建自定义前端。我获得了访问数据库的权限,现在看看它是如何运作的。我想输出用户的“快速拨号”号码,但是有问题解决它。以下是表格结构:
'customer' table
+-------------------------------------------------------------------------+
| CustomerID | FirstName | LastName | Balance | Email | Password | Status |
|-------------------------------------------------------------------------|
| 1 | Homer | Simpson | 5.00 | h@s.s | iheartm | 1 |
| 2 | Marge | Simpson | 3.00 | m@s.s | ihearth | 1 |
+-------------------------------------------------------------------------+
'calls' table
+------------------------------------------------------------------------+
| CallID | Caller | Callee | ServiceID | Duration | Cost | CustomerID |
|------------------------------------------------------------------------|
| 1 | 1234567 | 7654321 | 30 | 60 | 1.00 | 1 |
| 2 | 7654321 | 1234567 | 45 | 120 | 2.00 | 2 |
+------------------------------------------------------------------------+
'ani' (speed-dial) table
+---------------------------------------+
| PhoneNumber | ServiceID | ContactName |
|---------------------------------------|
| 1234567 | 45 | Homer |
| 7654321 | 30 | Marge |
+---------------------------------------+
正如你所看到的,1234567是荷马的电话号码,在Marge的快速拨号列表中,7654321是在荷马列表中的Marge号码。使用以下命令就可以提高客户的余额:$ current_user ['Balance'];,是否可以通过PHP向用户显示他的“快速拨号”号码?
答案 0 :(得分:0)
此请求未达到您想要的效果?
SELECT
a.CustomerID, a.FirstName, a.LastName, a.Balance, a.Email, a.Status,
b.ServiceID,
(SELECT GROUP_CONCAT(CONCAT(ContactName,':',PhoneNumber)) FROM ani GROUP BY PhoneNumber WHERE ServiceID = b.ServiceID)
FROM customer a
LEFT JOIN calls b ON a.CustomerID = b.CustomerID
WHERE a.CustomerID = 'replace_by_customer_id'
这应该获取客户表的数据,以及连接客户的快速拨号号码所产生的字符串。
我假设customerid对应于在呼叫中找到的一个唯一serviceid,表ani中的serviceid表示快速拨号号码的所有者。但它似乎是一个奇怪的架构,所以你应该给我们更多关于表格的数据或信息......
答案 1 :(得分:0)
从ServiceID到客户的特定条目似乎缺少关系。呼叫表提供这种关系似乎很奇怪,它应该只使用它。
只有您提供的信息,您才能加入呼叫,将CustomerID与我认为您拥有的ServiceID相关联。查询将如下所示:
SELECT ContactName, PhoneNumber FROM ani
LEFT JOIN calls ON ani.ServiceID=calls.ServiceID
WHERE calls.CustomerID=xxx