我一直在努力奋斗几个小时,所以非常欢迎任何反馈或建议。
我有三张桌子:
users
id name email
1 test test@test.com
2 test2 test2@test.com
pets
pet_id pet_name user_id
1 sam 2
2 sally 1
transactions
trans_id custom
1 1
2 pid2
3 pid1
好的,我想做的是获取与用户相关的交易数据。因此,在“交易”表中,“自定义”值1将与具有ID的“用户”相关。多数民众赞成......
带有'pid'的'Transactions'与pet id有关,所以'pid2'与sally有关,其用户是用户id 1.所以我需要在自定义与用户ID相关或者前缀时加入事务表'pid'和附加值与'pet_id'有关。以下是我想要的结果示例:
与user_id 1相关的交易:
trans_id 1, custom 1
trans_id 2 custom pid2 (this is because the pets owner is user_id 1)
这就是我现在尝试的地方:
SELECT users.*, transactions.*
FROM users
LEFT JOIN transactions on users.id = transactions.custom
这是我摔倒的地方:
SELECT users.*, transactions.*
FROM users
LEFT JOIN pets ON pets.user_id = user.id
LEFT JOIN transactions on (users.id = transactions.custom
OR pets.pet_id REGEXP '^pid(transactions.custom)')
答案 0 :(得分:0)
如果您无法更改表格设计并修复了前缀pid,则可以使用
OR (
pets.pet_id = SUBSTR(transactions.custom, 3)
AND SUBSTR(transactions.custom, 1 FOR 3) = 'pid')
请参阅SUBSTR的文档,因为MySQL会根据需要自动将数字转换为字符串,反之亦然,请参阅:http://dev.mysql.com/doc/refman/5.7/en/type-conversion.html
答案 1 :(得分:0)
您有来重构您的数据库。目前的结构将保证速度问题。
表格交易应该是
CREATE TABLE transactions
(
id Int NOT NULL, (id of transaction)
pet_id Int, (can be null)
user_id Int (can be null)
other columns here...
)
;