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分くらい。。。
コード書きながら、忘れないようにメモするように書いてたため、時間はおおよそ。