[前][次][番号順一覧][スレッド一覧]

mysql:12662

From: UNO Shintaro <UNO Shintaro <uno@xxxxxxxxxx>>
Date: Mon, 23 Jan 2006 20:32:58 +0900
Subject: [mysql 12662] Re: 複数の検索結果をつなぎあわせて取得したい

> MySQL 4.0.24

>  今はnum値の合計を求める方法でスクリプトを組んでいますが、idごとに
> 検索ヒット回数を求めて「ヒット回数の合計×num値」によっても同じ結果
> を取得できます。この線で組み直すと効率的な方法が見つかるかも、と思っ
> たのですが頭が混乱して途中で断念しています。

テーブルスキャンを条件の数だけ繰り返すのが嫌ということなら、

SELECT id,
   IF(`list` like '%|リンゴ|%', num, 0)
  +IF(`list` like '%|イチゴ|%', num, 0)
  +IF(`list` like '%|みかん|%', num, 0)
        :
        :
  AS `SUM`
FROM `prod`

という感じにして、この結果から`SUM`カラムが0でない行を抽出するとか。
ここでMySQL4.1以降だったら SELECT (上記のSELECT文) AS t WHERE `SUM` <> 0 で
抽出までできます。


ところで私の勘違いかもしれませんが、ぱっと見た感じ、欲しいデータがなぜ
「ヒット回数の合計×num値」なのか疑問です。numはそのローのlistの要素数を
指しているようなので、欲しいのは「ヒット回数」ではないのかと思いました。
(上記のSQLで、IF関数の第2パラメータに指定している「num」を「1」に変えれば
そういう答えになります)

-- 
UNO Shintaro, 宇野 信太郎  ( mailto:uno@xxxxxxxxxx )
http://www.venus.dti.ne.jp/~uno/  http://d.hatena.ne.jp/uno/


[前][次][番号順一覧][スレッド一覧]

     12661 2006-01-23 19:30 [Hisamitsu Issei <ds1] 複数の検索結果をつなぎあわせて取得したい
->   12662 2006-01-23 20:32 ┗[UNO Shintaro <uno@xx]                                       
     12663 2006-01-24 02:06  ┗[Hisamitsu Issei <ds1]                                     
     12664 2006-01-24 07:57   ┗[UNO Shintaro <uno@xx]