MySQL 5.1.54 Viewについて教えて下さい。下のViewを作ってみたんですが、Navicatから見ようとすると、 view_bookはプライマリーキーがありません。 このテーブルをUpdateする時は下記の様に行います: 更新 view_book set 変更するフィールドと値 where 全てのフィールドと現在地 LIMIT 1 というメッセージが出ます。(内容は正常に表示されます)。ViewでPKを作るにはどのようにすればいいのでしょうか? create definer=current_user view view_book as select distinct filename as v_filename, titlename as v_titlename, a.author_id as v_author_id, b.author_name as v_author_name from book_tbl a inner join author_tbl b on a.author_id = b.author_id order by a.id;
ちょっと調べきれなかったんですが 検索条件で where A = md5("32桁") みたいに、md5で検索できると思うんですが、 複数のカラムを足した値とかのmd5で検索は、、、できないですよね? 例えば、カラムA+カラムBの値がmd5のCだとして where A+B=md5(C) とかでできたらいいなと。。。 必要ないって言われたらそれまでですがw
43 :
普通に WHERE CONCAT(A, B) = md5(C) とかじゃいかんのか。 というかA+Bがmd5(C)ってどうゆーこと? なんか外しているかもだけど WHERE md5(CONCAT(A, B)) = C なほうがわかる・・
最近mysqlを勉強し始めたのですが、 CREATE TABLE t_pre_member ( id MEDIUMINT NOT NULL AUTO_INCREMENT, username VARCHAR(50), password VARCHAR(50), last_name VARCHAR(50), first_name VARCHAR(50), birthday CHAR(8), ken SMALLINT, link_pass VARCHAR(50), reg_date TIMESTAMP(14), PRIMARY KEY (id) ); というSQL文をphpadminで実行すると、 #1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '(14) NOT NULL, PRIMARY KEY (id) )' at line 5 というエラー文章が表示され、実行することができません。 TIMESTAMP(14)をTIMESTAMPに変更すると実行することができます。 TIMESTAMP(14)を使用するにはどうしたらいいでしょうか。 使っているmysqlは5.5.10で、VertrigoServで一括インストールを行ったものです。 ご教授お願いします。
登録されている問題をランダムに出したかったので select * from question where test_id='" . mysql_real_escape_string($test_id) . "' というのにorder by rand()を加えて select * from question where test_id='" . mysql_real_escape_string($test_id) . "'order by rand() としました。 ランダムにはなったのですが、問題が被ることがあります。 一度出題したIDを除外してランダム検索したいと思っているのですが、検索時に除外項目をつけることは可能でしょうか?
>>50 ncharなんて昔からないと思うけど。Oracleと勘違いしてない? > create database test_database default character set utf8; でデータベースを作って、 > create table test_table( name char);でテーブルを作ればいいんでしょうか? OK
>>49 Linux系ならDBサーバとWebサーバの両方でsysstat使って状態を調べてみたらいいと思う。 sar -dqurあたりで、ディスクアクセス、プロセス数、cpu使用率、メモリみる。どれも大丈夫だったらネットワーク経路のチェックかな。
56 :
勉強としてtwitterを参考に、 「自分のつぶやきと友達のつぶやきをタイムラインに表示する」 という物を作っているのですが、そのSQLで悩んでいます。 ■テーブル構成(テーブル名:フィールド) user:id、name friend:id、from_user_id、to_user_id voice:id、user_id、comment、date ■データ構成 □user 1|山田太郎 2|鈴木花子 □friend 1|1|2 □voice 1|1|山田のつぶやき|2011-10-25 18:55:00 2|2|鈴木のつぶやき|2011-10-25 19:00:00 ■考えたSQL SELECT * FROM voice LEFT JOIN (SELECT user.id,user.name FROM user LEFT JOIN friend ON user.id=friend.from_user_id) AS user_friend ON voice.user_id=user_friend.id WHERE voice.user_id='1' 「山田太郎」の会員ページにアクセスした時のタイムラインを想定したのですが、 WHEREにこの条件を付けると、つぶやきは「山田太郎」の物しか取れません。 友達関係である「鈴木花子」のつぶやきも一緒に取得するには どういうSQLを書けばいいのでしょうか?お分かりな方はアドバイスをお願いします。
>>57 ありがとうございます。凄く参考になりました。 とりあえず当初の目的である「自分と友達のつぶやきを表示」 は、以下のSQLで出来そうです。INがポイントですね。 SELECT * FROM voice WHERE user_id IN (SELECT to_user_id FROM friend WHERE from_user_id='1') || user_id='1' ORDER BY date DESC 会員のプロフィールも結合したかったのですが、 そうするとかなり重くなりそうなので、 それは出力時に1件ずつ取得しようと思います。