PHP:从* strange * MySQL数据库中获取数据

时间:2011-09-03 22:09:00

标签: php mysql sql foreign-key-relationship

我有一个用来自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向用户显示他的“快速拨号”号码?

2 个答案:

答案 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