Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/227.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 帮助抓取(内部?)连接_Php_Mysql - Fatal编程技术网

Php 帮助抓取(内部?)连接

Php 帮助抓取(内部?)连接,php,mysql,Php,Mysql,我在建立查询时遇到问题。我可以在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 = '

我在建立查询时遇到问题。我可以在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 字段:id、url

表2 字段项目id、相关id、字段id

我知道table1.url的最后一部分(如“%/$filename”),通过它我选择了table1.id。 table1.id等于table2.rel_id中的一个条目。因此,获取该条目并选择table2.item_id。 在表2中,有另一个条目具有相同的table2.item_id,它将具有table2.field_id='42' 最后,我需要的值是table2.rel_id,其中table2.field_id是42。 我将获取该值并将其放入$user\u id中


这可以通过使用联接/内部联接的一个查询来完成吗?

当然,应该是这样的:

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'
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
您甚至可以输入一个distinct,这样每个
t2_second.rel_id
只返回一次:

SELECT DISTINCT [...]

但是,如果
t2\u second.field\u id=42
将查询限制为每
t2\u second只返回一行,则可能不需要此选项。rel\u id

这是一个适合我的查询,对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'

耶,它工作了!在第二个内部连接中有一个小变化,请参见我的答案。我甚至得到了同一个表的两个实例:P