0

始める前に、私はphp/sqlの両方に非常に慣れていないので、私の理解が少し限られている場合は申し訳ありません.

基本的に、ユーザーがさまざまなことをしてポイントを獲得し、それらを新しい機能と交換できるユーザーログインシステムを備えたサイトを取得しました。この例では、関数を「user_images」と呼びます。

トランザクションは「function_users」に保存されます..

ID
function_id
user_id
cost
date

ユーザーがショップページにアクセスして機能を購入し、適切なポイントまたは通貨を差し引くことができるようにシステムを構築しました。経験豊富なコーダーに質問です。機能が購入されたかどうかを判断する最も効率的な方法は何ですか?ユーザーによる?

大まかな例 (はい、msql インジェクションの証明ではないことはわかっています。単なる例です:

$logged = $_SESSION['user_id'];

$check = mysql_query("SELECT * FROM feature_users WHERE `user_id`='$logged' AND feature_id='1'");
$check = mysql_num_rows($check);

if ($check < 1) {
include/features/user_images.php
?>

誰かにコードを書いてもらうように頼んでいるのではなく、ユーザーがその機能を購入して表示できるようにするための最も効率的な通信方法を尋ねているだけです。前もって感謝します

4

1 に答える 1

0

クエリ:

SELECT *
FROM feature_users
WHERE `user_id` = '$logged' AND feature_id = '1';

はとても簡単です。可能な限り効率的にするために、テーブルに複合インデックスが必要です。

create index feature_users_user_feature on feature_users(user_id, feature_id);

3つの追加コメント。まず、すべての列を返す必要はありません。クエリが何かを返す場合、ユーザーは機能を持っています。次に、id列は通常整数です (したがって、読みやすくするために、定数値を単一引用符で囲まないでください)。第三に、誰かがユーザーを入力する場合、通常は名前を入力します。あなたは本当に意味するかもしれません:

SELECT 1
FROM feature_users fu
     users u
     on fu.user_id = u.user_id
WHERE `user_name` = '$logged' AND feature_id = 1;
于 2013-09-06T10:45:48.183 に答える