0

これを取得するにはどうすればよいですか: 123from this: 123?arg=value#ancor, in MYSQL; つまり、クエリを削除し、URL パスからアンカーを削除します。

シナリオ例:

table1:
+----+------+
| id | path |
+----+------+
|  1 |  100 |
|  2 |  200 |
|  3 |  300 |
+----+------+

table2:
+----+----------------+
| id |           path |
+----+----------------+
|  1 |     100#anchor |
|  2 |  200?arg=value |
|  3 |      other/300 |
+----+----------------+

SELECT * FROM table1
INNER JOIN table2
ON table1.path = revised_path(table2.path)

result:
+----+------+----+---------------+
| id | path | id |          path |
+----+------+----+---------------+
|  1 |  100 |  1 |    100#anchor |
|  2 |  200 |  2 | 200?arg=value |
+----+------+----+---------------+

更新: パスは常に数値ですが、任意の長さにすることができます。

更新 2: modified_pa​​th() は、私が探しているソリューションの一時的な代替品です。

4

2 に答える 2

0

そのため、パスは URL の一部のように見えます。したがって、PHP 関数 parse_url がうまく機能します。

$sql = "SELECT * FROM table1 INNER JOIN table2 ON table1.path = revised_path(table2.path)";
$result = mysql_query($sql);
while ($data = mysql_fetch_object)) {
    $path = parse_url($data->path);
}

// more code to diplay $path etc...

parse_urlに関する PHP ドキュメント

于 2012-07-02T21:54:22.443 に答える
0

私が理解していることから、パスが一致するかどうかを確認する必要がありますが、パスが他のデータに含まれているため、テーブル 1 のパス (id) がテーブル 2 のパスに含まれていることを確認する必要があります。

SELECT table_1.id as t1_id,table_1.path as t1_path,
table_2.id as t2_id, table_2.path as t2_path
FROM table_1
INNER JOIN table_2
WHERE INSTR(table_2.path,table_1.path) > 0

編集:

これにより、求めている出力が得られるはずです。

SELECT table_1.id as t1_id,table_1.path as t1_path,
table_2.id as t2_id, table_2.path as t2_path
FROM table_1
INNER JOIN table_2
where table_1.path = cast(table_2.path as unsigned)
于 2012-07-02T22:02:35.350 に答える