我是SQL新手,在编写以下查询时遇到了困难。
脚本
用户有两个地址,家庭地址(App\User)和列表地址(App\Listing)。当访问者搜索郊区、邮政编码或州的列表时,如果用户的列表地址不匹配-但是如果家庭地址匹配-他们也将出现在搜索结果中。
例如:如果访问者搜索Melbourne,我希望包括Melbourne中的列表,以及Melbourne中有地址的用户的列表。
预期产量:

user_id first_name  email                  suburb    postcode state
1       Mathew      [email protected]  Melbourne 3000     VIC
2       Zammy       [email protected]           Melbourne 3000     VIC

桌子
用户:
id  first_name  email
1   Mathew      [email protected]
2   Zammy       [email protected]
3   Tammy       [email protected]
4   Foo         [email protected]
5   Bar         [email protected]

列表:
id  user_id hourly_rate description
1   1       30          ABC
2   2       40          CBD
3   3       50          XYZ
4   4       49          EFG
5   5       10          Efd

地址:
id  addressable_id  addressable_type    post_code   suburb     state    latitude    longitude
3584    1           App\\User           2155        Rouse Hill  NSW -33.6918372 150.9007221
3585    2           App\\User           3000        Melbourne   VIC -33.6918372 150.9007221
3586    3           App\\User           2000        Sydney      NSW -33.883123  151.245969
3587    4           App\\User           2008        Chippendale NSW -33.8876392 151.2011224
3588    5           App\\User           2205        Wolli Creek NSW -33.935259  151.156301
3591    1           App\\Listing        3000        Melbourne   VIC -37.773923  145.12385
3592    2           App\\Listing        2030        Vaucluse    NSW -33.858935  151.2784079
3597    3           App\\Listing        4000        Brisbane    QLD -27.4709331 153.0235024
3599    4           App\\Listing        2000        Sydney      NSW -33.91741   151.231307
3608    5           App\\Listing        2155        Rouse Hill  NSW -33.863464  151.271504

最佳答案

试试这个。你可以检查它here

SELECT l.*
FROM listings l
LEFT JOIN addresses a_l ON a_l.addressable_id = l.id
  AND a_l.addressable_type = "App\\Listing"
  AND a_l.suburb = "Melbourne"
LEFT JOIN addresses a_u ON a_u.addressable_id = l.user_id
  AND a_u.addressable_type = "App\\User"
  AND a_u.suburb = "Melbourne"
WHERE a_l.id IS NOT NULL OR a_u.id IS NOT NULL

10-08 12:54