-1

コードの開始方法がわからない MySQL IN 句について質問があります。

オリジナル

$merchant_separated = implode(",", $array);
$sql = mysql_query("SELECT * FROM assigned_id WHERE id NOT IN ($merchant_separated) AND viewable = 'True'");

DBテーブルにあるのは、次のコードです。

$sql = mysql_query("SELECT * FROM product_purchased");
whil($r=mysql_fetch_array($sql))
$r['merchantid_imploded'] ='9,6,2,3,5,4,1,7,8'
$r['productnumber'] = 'Fjduensd'
$r['Title'] = 'Animation Csr'
$r['Product Name'] = 'Inwards Development'

私がやりたいことは、以下のコードのように取得することです。merchantid_imploded 9,6,2,3,5,4,1,7,8クエリにはこのフィールドがあり、clientid はカンマでフェッチできないため、機能しません。

$clientid = 2
$sql = mysql_query("SELECT * FROM product_purchased WHERE merchantid_imploded IN ($clientid) ");

私がやりたいことは、購入したこの製品でこの商人を取得することです

お知らせ下さい

4

1 に答える 1

2

ええと、merchantid_imploded の設計は、多くの問題を引き起こします。これらの番号は、製品番号とともに、行ごとに 1 つずつ別のテーブルに格納する必要があります。これについて詳しくは、「データベースの正規化」という用語を調べてください。これを修正するのに最適な時期は、この設計にさらにプログラミング作業を加える前の今です。(同時に、パラメーター化されたクエリを使用してコードを SQL インジェクション攻撃から保護することを検討してください。)

そうは言っても、MySQL (SQL データベースの中でもユニーク) は、ユーザーがやりたいことを実行できるようにするための多くの機能を提供します。1 つの可能性は FIND_IN_SET です。

WHERE FIND_IN_SET($clientid, merchantid_imploded) > 0

また、引数を適切な場所に配置すると、単純な古い IN が MySQL で機能するはずです。

WHERE $clientid IN merchantid_imploded
于 2012-04-18T02:44:41.543 に答える