数据库里有两张表,
一个是事务表:
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/