PHP: выборка данных из * странной * базы данных MySQL - PullRequest
1 голос
/ 04 сентября 2011

У меня есть программное обеспечение с закрытым исходным кодом, написанное на C # / .NET от компании VoIP, которое невозможно настроить, и я хотел создать пользовательский интерфейс с помощью 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 - это номер телефона Гомера и в списке быстрого набора Мардж, а 7654321 - номер Мардж в списке Гомера. Точно так же, как я могу вывести баланс клиента при входе в систему с помощью: $ current_user ['Balance']; есть ли способ показать пользователю его номера «быстрого набора» в PHP?

Ответы [ 2 ]

0 голосов
/ 04 сентября 2011

Кажется, отсутствует связь между ServiceID и конкретной записью в клиенте. Может показаться странным, что таблица вызовов обеспечивает это отношение, она должна просто использовать его.

Имея только предоставленную вами информацию, вы можете присоединиться только к звонкам, чтобы связать CustomerID с ServiceID, который, я полагаю, у вас есть. Запрос будет выглядеть так:

SELECT ContactName, PhoneNumber FROM ani
LEFT JOIN calls ON ani.ServiceID=calls.ServiceID
WHERE calls.CustomerID=xxx
0 голосов
/ 04 сентября 2011

Этот запрос не достигает того, что вы хотите?

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 соответствует одному уникальному идентификатору службы, найденному в вызовах, а идентификатор службы в таблице ani указывает владельца номера быстрого набора. Но это кажется странной архитектурой, поэтому вы должны предоставить нам больше данных или информации о таблицах ...

...