たかのしゅーのエンジニアへの道

ガチ初心者がウェブカツ受講すると、どうなるか。。。ってブログです。

6月6日の学習記録

今日はお気に入り登録した商品をマイページに表示するやつを作った。

 

・DBの連結をした。その際、つなげる元のDBの情報(今回はお気に入り情報と、商品情報)の必要な情報のみ取得したい。

外部結合(LEFTとRIGHT JOIN)だと、必要ない情報まで取得してしまうのでダメ。

内部結合(INNER JOI)だと、両方の必要な情報のみ取得できる。

 

・最初、プロダクトテーブルとライクテーブルを結合。プロダクトテーブルのカラムが順番に表示され、最後にライクテーブルの頭から結合された。ただし、両方のテーブルにある同名のカラムに関しては、ダブって表示されることはなかった。

試しに、、、

’SELECT * FROM product AS p INNER JOIN `like`  AS l WHERE p.user_id = :u_id AND delete_flg = 0’;

これと

’SELECT * FROM `like` AS l INNER JOIN product  AS p WHERE l.user_id = :u_id AND delete_flg = 0’;

これを試した結果、取得したレコードの順番は違えど、同じレコードを取得したし、画面の表示も同じだった。

 

ただ、お気に入りしているかいないか、の情報がメインだと思うので、後者のSQL文を使った。

 

また、お気に入り登録した数のみを取得して、それを表示させる機能も追加した。

SELECT文のcount(*)を使って作ったけど、数のみを取得する方法がわからなかった。ググって調べると、fetchColumn();というのを使えば、取得したレコード数を表示できるとのことだったので、クエリ結果を$resultに代入して表示させたら、無事に成功。

 

ただ、ふと思い返し、レコード数を表示させるやつ何かやったような。。。

で、思い出したのがrowCount();

 

先のSELECT文は、

SELECT count(*) FROM `like` WHERE user_id = :u_id ~以下省略

クエリを実行した後、

$result = $stmt->fetchColumn();

でOKだった。

rowCount();を使う場合、この文でレコード数をカウントするので、

先のcount(*)部分を、*に変更した。

SELECT * FROM `like` WHERE user_id = :u_id ~以下省略

こうすることによって、期待通りの表示になった。

 

色々実験することで身につくものだと、ここ数日実感してる。

この調子でOP進めていこう。

 

19時から21時

ブログ20分くらい。。。

コード書きながら、忘れないようにメモするように書いてたため、時間はおおよそ。

 

webukatu.com