1

ネットワーク ノード マッピング プログラムで使用するために、MySql テーブルを再フォーマットしたいと考えています。元の形式は次のとおりです。

| ID | story | org | scribe |

そして、すべての組織名を次のような 2 つの出力テーブルにプルしたいと思います。

| org1 | org2 | scribe | weight of connection |

org1 と org2 は両方とも、元のテーブルの同じフィールドから取得され、1 つ以上のスクライブを共有することによって相互に関連付けられています。すべてのスクライブには一意の ID があります。もちろん、重複したエントリは必要ありません。

私がこれまでにできることは、次のように、組織の '%text%' 検索を実行し、その組織を出力から除外することによって、リスト内のいずれかの組織に接続されているすべての組織を取得することです。

SELECT 'tabitha' as org1,
org as org2,
teller as scribe_id,
count(teller) as weight
FROM `stories`
WHERE teller in
 (
 (SELECT
 teller
 FROM `stories`
 WHERE org like '%tabitha%'
 group by teller)
 )
 and org not like '%tabitha%'
 group by teller, org

そのため、自己結合またはそれが機能するケースについていくつかのトリックがあるように感じますが、まだ何も見つけていません。

4

2 に答える 2

0

あなたが何をしようとしているのかは完全にはわかりませんが、おそらくこのようなことですか?

select t1.org as org1, t2.org as org2, teller as scrib_id, count(teller) as weight 
from stories t1 join stories t2 where t1.teller=t2.teller and t1.org!=t2.org
group by teller,t1.org

これにより、出納係で t1 と t2 (両方とも同じテーブル) の間で結合が実行され、それ自体に結合するレコードが除外されます。

私はかなり外れている可能性がありますが、おそらく結合構文のいくつかのバージョンが役立つかもしれません.

于 2010-12-09T15:05:55.563 に答える
0

このクエリは機能しました。与えられた解決策からの唯一の微調整は、重みを正しく計算していなかったことです。

select t1.org as org1,
       t2.org as org2,
       t1.teller as scrib_id,
       count(distinct t1.story) as weight
       /* need to count the stories instead of the scribes now */    
from stories t1 join stories t2
where t1.teller=t2.teller
    and t1.org!=t2.org and t1.org not in ('none','[swahili]','[]')
    /* this just excludes nonsense categories */
    and t2.org not in ('none','[swahili]','[]')
group by t1.teller,t1.org
order by weight desc, t1.org;

次の質問ですが、可能かどうかもわかりませんが、 sql に出納係または書記で APPROXIMATE 一致を実行するように依頼できますか? これらの ID が電話番号で、誰かが数字の 1 つを忘れた場合でも、それらをグループ化したいと考えています。それは mysql には難しすぎると思います。Python か何かが必要です。

于 2010-12-09T21:15:13.703 に答える