このディレクトリの索引
http://toro.2ch.net/test/read.cgi/db/1343899481/431
#  UPDATE list SET target=1 WHERE id=1 
#  というので更新をかけたいのですが、id=1が複数あります。 
#  どれでもいいのでid=1のものを1つ更新をかけたいのですがそういったことは可能でしょうか? 
#  最後に「LIMIT 1」とつけたら 
#  SQLSTATE[HY000]: General error: 1 near "LIMIT": syntax errorとエラーが表示されましたので間違っているとは思うのですが 
#  こういったことが可能であれば構文的にご指摘いただけないでしょうか。 
# 
# 



'UPDATE list SET target=1 WHERE id=1
というので更新をかけたいのですが、id=1が複数あります。
どれでもいいのでid=1のものを1つ更新をかけたい' :-
        テーブルの更新(list,[id],[1],true,[target],[1]).

テーブルの更新(_テーブル名,_鍵属性ならび,_鍵値ならび,_条件,_置換属性ならび,_置換値ならび) :-
        テーブル定義から実行項と引数ならびを得る(_テーブル名,P,_引数ならび),
        鍵を設定する(_テーブル名,_鍵属性ならび,_鍵値ならび,_引数ならび),
        条件に適合した節を削除する(P,_条件),
        引数ならびの値を置換する(_テーブル名,_置換属性ならび,_置換値ならび,_引数ならび,_置換された引数ならび),
        置換された節を先頭に加える(_テーブル名,_置換された引数ならび).

条件に適合した節を削除する(P,_条件) :-
        retract(P),
        '診断: 条件に適合した節を削除する'(P,_条件).

'診断: 条件に適合した節を削除する'(P,_条件) :-
        call(_条件),!.
'診断: 条件に適合した節を削除する'(P,_条件) :-
        asserta(P).

テーブル定義から実行項と引数ならびを得る(_テーブル名,P,_引数ならび) :-
        findall(_,テーブル定義(_テーブル名,_,_),_引数ならび),
        P =.. [_テーブル名|_引数ならび],!.

鍵を設定する(_,[],[],_引数ならび).
鍵を設定する(_テーブル名,[_鍵属性|R1],[_鍵値|R2],_引数ならび) :-
        テーブル定義(_テーブル名,_nth1,_鍵属性),
        nth1(_nth1,_引数ならび,_鍵値),
        鍵を設定する(_テーブル名,R1,R2,_引数ならび).

引数ならびの値を置換する(_,[],[],_置換された引数ならび,_置換された引数ならび).
引数ならびの値を置換する(_テーブル名,[_置換属性|R1],[_置換値|R2],_引数ならび,_置換された引数ならび) :-
        テーブル定義(_テーブル名,_nth1,_置換属性),
        要素番号によるならびの置換(_nth1,_置換値,_引数ならび,_引数ならび_2),
        引数ならびの値を置換する(_テーブル名,R1,R2,_引数ならび_2,_置換された引数ならび).

要素番号によるならびの置換(_要素番号,_置換要素,_対象ならび,_置換ならび) :-
        length([_|L0],_要素番号),
        append(L0,[_|R],_対象ならび),
        append(L0,[_置換要素|R],_置換ならび),!.

置換された節を先頭に加える(_テーブル名,_置換された引数ならび) :-
        P =.. [_テーブル名|_置換された引数ならび],
        asserta(P).