今私は2つの別個のSQL文を実行します.1つは、検索文と基本的に同じ基準でSELECT COUNT(*)
を実行します。私はこれらの声明を作成する上で最善ではないし、時には少し遅く、私がやることをやるためのよりよい方法があるかどうかを知りたいと思う。おそらく、PHPでSQL文を1つだけやって、もう少し作業をしているのでしょうか?ここには "検索が含まれています"という例があります。SQL検索でページ区切りを行う最も高速で効率的な方法DB2
2番目のステートメントでは、最初の行カウントステートメントの結果によって部分的に計算されるYの間にXが表示されます。
SQL行数:
SELECT COUNT(*)
FROM itemmast
LEFT OUTER JOIN itemweb
ON iline = line
AND iitem = item
JOIN linemst
ON iline = lline
LEFT OUTER JOIN custord
ON opline = iline
AND opitem = iitem
AND opcust = '12345'
LEFT OUTER JOIN ordwdtl
ON owline = iline
AND owitem = iitem
AND owusr ='user'
AND owcust ='12345'
WHERE ico = 01
AND iecomm = 'Y'
AND (UPPER(ITEMDESC) || UPPER(PRODDESC)) LIKE '%FOO%'
OR LINE LIKE '%FOO%'
OR UPPER(MFGNAME) LIKE '%FOO%'
OR UPPER(ITEM) LIKE '%FOO%'
OR UPPER(PRODNAME) LIKE '%FOO%'
OR UPPER(IDESC1 || IDESC2) LIKE '%FOO%'
OR UPPER(IMFGNO) LIKE '%FOO%'
OR UPPER(IITEM) LIKE '%FOO%')
SQL検索:
SELECT *
FROM (SELECT iline AS line, iitem AS item, rownumber() OVER (ORDER BY item) AS ROW_NUM
FROM itemmast
LEFT OUTER JOIN itemweb
ON iline = line
AND iitem = item
JOIN linemst
ON iline = lline
LEFT OUTER JOIN custord
ON opline = iline
AND opitem = iitem
AND opcust = '12345'
LEFT OUTER JOIN ordwdtl
ON owline = iline
AND owitem = iitem
AND owusr = 'user'
AND owcust = '12345'
WHERE ico = 01
AND iecomm = 'Y'
AND (UPPER(ITEMDESC) || UPPER(PRODDESC)) LIKE '%FOO%'
OR LINE LIKE '%FOO%'
OR UPPER(MFGNAME) LIKE '%FOO%'
OR UPPER(ITEM) LIKE '%FOO%'
OR UPPER(PRODNAME) LIKE '%FOO%'
OR UPPER(IDESC1 || IDESC2) LIKE '%FOO%'
OR UPPER(IMFGNO) LIKE '%FOO%'
OR UPPER(IITEM) LIKE '%FOO%'))
AS TEMP
WHERE ROW_NUM BETWEEN 0 AND 25
まず、長い、詳細な返信をありがとうございます。私はreasonラインがupper()ではないと思うのは、それがすでにupperとして保存されていて変換が必要ないからです。私はそれが他のフィールドの場合であるかどうかをチェックし、upper()を削除して、それが同様に役立つかどうかを確認します。私は他の人と意見を交わす必要があります。これはIよりもはるかに専門家です。これは私が書いた最初に生成されたSQLステートメントの1つで、それはちょっと面倒です:) – Bead
それはあまりにも面倒ではありません。文字列の連結を削除し、列を別々に 'upper()'したいかもしれませんが。 –