我在构建查询时遇到问题。我可以在3个不同的查询中做我想做的事。
SELECT id FROM table1 WHERE url LIKE '%/$downloadfile'
put that in $url_id
SELECT item_id FROM table2 WHERE rel_id = '$url_id'"
put that in $item_id
SELECT rel_id FROM table2 WHERE rel_id = '$item_id' AND field_id = '42'"
put that in $user_id
但是通过阅读关于连接和内连接的示例,我认为有一种更优雅的方式。我无法围绕写一个更好的查询(但我想),我可以描述它应该如何:
表1 fields:id,url
表2 字段item_id,rel_id,field_id
我知道table1.url的最后一部分(LIKE'%/ $ filename'),我选择table1.id。 table1.id等于table2.rel_id中的一个条目。所以得到它并选择table2.item_id。 在table2中有另一个条目具有相同的table2.item_id,它将有一个table2.field_id ='42' 最后我需要的值是table2.rel_id,其中table2.field_id是42。 我将获取该值并将其放在$ user_id
中可以使用连接/内连接进行一次查询吗?
答案 0 :(得分:2)
SELECT url, second.rel_id AS user_id
FROM table1
INNER JOIN table2 AS first
ON table1.id=first.rel_id
INNER JOIN table2 AS second
ON first.item_id=second.rel_id
WHERE second.field_id='42'
AND table1.url LIKE '%/:downloadfile'
答案 1 :(得分:0)
当然,应该是这样的:
SELECT t2_second.rel_id
FROM table1 t1
INNER JOIN table2 t2_first ON t1.id = t2_first.rel_id
INNER JOIN table2 t2_second ON t2_second.rel_id = t1_first.item_it
WHERE
t1.url = '%/:filename' AND
t2_second.field_id = 42
你甚至可以抛出一个不同的,以便每个t2_second.rel_id
只返回一次:</ p>
SELECT DISTINCT [...]
但是,如果t2_second.field_id = 42
限制查询仅为每个t2_second.rel_id
答案 2 :(得分:0)
这个对我有用的查询,对Ignacio的回答做了一个小改动:
SELECT url, second.rel_id AS user_id
FROM table1
INNER JOIN table2 AS first
ON table1.id=first.rel_id
INNER JOIN table2 AS second
ON first.item_id=second.item_id
WHERE second.field_id='42'
AND table1.url LIKE '%/:downloadfile'