数据库里有两张表,
一个是事务表:

id    mac            timestamp     siteid


1     C8BCC8BD7684   1365987620      5


2     8C2DAA4CB9E6   1365995414      4

另一个是设备详细信息表:
id       mac_address       organization


1        00:00:0E          Fujitsu limited


2        00:00:00          Xerox corporation


3        C8:BC:C8          Apple, inc.


4        8C:2D:AA:         Apple, inc.

我需要把这两张桌子连在一起。所以输出表应该是,
 id   mac            timestamp     siteid      organization

1     C8BCC8BD7684   1365987620      5         Apple, inc.


2     8C2DAA4CB9E6   1365995414      4         Apple, inc.

我能用wordwrap(substr(transactions.mac,0,6),2,“:”,true)从transactions.mac中检索前6个字母吗?我尝试了下面的代码,但是我得到了mysql错误:
"SELECT transactions.mac,equipment_details.mac_address,equipment_details.organization FROM `transactions`, `equipment_details` WHERE transactions.mac LIKE equipment_details.mac_address+'%' "

感谢您的帮助!

最佳答案

SELECT  a.*,
        b.Organization
FROM    transactions a
        INNER JOIN equipment_details b
            ON SUBSTRING(a.mac, 1,6) = REPLACE(b.mac_address, ':', '')

SQLFiddle Demo
输出
╔════╦══════════════╦════════════╦════════╦══════════════╗
║ ID ║     MAC      ║ TIMESTAMP  ║ SITEID ║ ORGANIZATION ║
╠════╬══════════════╬════════════╬════════╬══════════════╣
║  1 ║ C8BCC8BD7684 ║ 1365987620 ║      5 ║ Apple, inc.  ║
║  2 ║ 8C2DAA4CB9E6 ║ 1365995414 ║      4 ║ Apple, inc.  ║
╚════╩══════════════╩════════════╩════════╩══════════════╝

唯一的问题是它不使用索引,如果您有大型数据库,它的执行速度会非常慢。最好的方法是正确地规范化表:)

关于php - MySQL:联接两个表,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/16766253/

10-11 01:48
查看更多