0

OK、最初に、MySQL 構文が私の最大の強みではないことを認めます。だから、ここにいます。

URL :

ID   Url                              Code
===============================================
1    http://www.google.com            Abcd
2    http://www.freetemplates4u.com   Efgh
3    ...

投稿 :

ID  Title            Address
===============================================
1   Some Title 1     http://mize.it/Abcd
2   Some Title 2     http://mize.it/Efgh
3   ...

次のテーブルを取得するクエリを作成したい

Title             Url
=======================================================
Some Title 1      http://www.google.com
Some Title 2      http://www.freetemplates4u.com

一言で言えば:

  • テーブルからUrl-Codeペアを取るUrls
  • テーブル内 (フィールド内)でhttp://mize.it/+Codeを検索します。PostsAddress
  • 最終TitleUrl結果表を結合します。

結合と連結に関係があることは知っていますが、間違いなく迷っています。


SIDENOTE :現在のデータベースの構造も、パフォーマンスの問題も気にしません。私が望むのは、既存のデータを既存のデータベースから (変更する必要なく)、新しい Web サイトのデータベースに (まったく異なる形式/構造で) 転送することだけです。

4

4 に答える 4

3

DB 設計を変更する必要があります。mysql は完全なテーブルスキャンを実行する必要があるため、このクエリのパフォーマンスは低下します。

Posts テーブルにコード列を追加して、適切な値 (挿入/更新時に入力) を追加し、コード (両方のテーブル) にインデックスを追加してみてください。

これで、できるはずです。

SELECT Posts.Title, Urls.Url
FROM Posts
INNER JOIN Urls ON Post.Code = Urls.Code

アップデート:

URL の最初の部分が常に同じである場合、これは機能します。

SELECT Post.Title, Urls.Url
FROM Posts
INNER JOIN Urls ON Post.Adress = CONCAT('http://mize.it/', Urls.Code)
于 2013-05-13T06:56:52.583 に答える
1

試す

SELECT p.title,x.url
FROM Posts p 
INNER JOIN ( SELECT url, CONCAT('http://mize.it/',code) AS xcode FROM Urls ) x  
ON (x.xcode = p.address)

ワーキングデモ

于 2013-05-13T07:02:41.660 に答える
0

これは別のアプローチです。テストするのに時間がかかりました。

あなたのAddressフィールドには完全なURLが含まれており、その後のものと一致するだけでよい/ため、実際のURLを何も置き換えず(URLは常に同じであると想定しています)、フィールドと一致する文字列を用意できCodeます.

SELECT b.Title, a.URL
FROM Url a
LEFT JOIN Posts b
ON a.Code = REPLACE(b.Address, 'http://mize.it/', '')
ORDER BY a.ID ASC
于 2013-05-13T07:03:49.057 に答える
-1

次のクエリを確認してください。

select m1.Url, m2.Title from Urls as m1, Posts as m2 

where m2.address like 'http://mize.it/%'
于 2013-05-13T07:04:41.460 に答える