質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
SQL

SQL(Structured Query Language)は、リレーショナルデータベース管理システム (RDBMS)のデータベース言語です。大きく分けて、データ定義言語(DDL)、データ操作言語(DML)、データ制御言語(DCL)の3つで構成されており、プログラム上でSQL文を生成して、RDBMSに命令を出し、RDBに必要なデータを格納できます。また、格納したデータを引き出すことも可能です。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

MariaDB

MariaDBは、MySQL派生のオープンソースなリレーショナルデータベースシステムです。 また、MySQLとほぼ同じデータベースエンジンに対応しています。

Q&A

解決済

1回答

4121閲覧

動的にリンク先を作る方法

earnest_gay

総合スコア615

SQL

SQL(Structured Query Language)は、リレーショナルデータベース管理システム (RDBMS)のデータベース言語です。大きく分けて、データ定義言語(DDL)、データ操作言語(DML)、データ制御言語(DCL)の3つで構成されており、プログラム上でSQL文を生成して、RDBMSに命令を出し、RDBに必要なデータを格納できます。また、格納したデータを引き出すことも可能です。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

MariaDB

MariaDBは、MySQL派生のオープンソースなリレーショナルデータベースシステムです。 また、MySQLとほぼ同じデータベースエンジンに対応しています。

0グッド

0クリップ

投稿2016/06/26 07:37

先日こちらの質問で下記のようなものはできました。

イメージ説明

まだ途中ですがこのようなソースになっています。

<?php page = filter_input(INPUT_GET, 'page'); $start = (int) $page * 5; $sql = sprintf("SELECT user_data.id,birth_year,birth_month,birth_day,pref,city,major_category,major_skill,cont_date,introduction FROM user_data,user_pr WHERE user_data.id=user_pr.user_id ORDER BY id DESC LIMIT %d, 5", $start); $stmt = $pdo->prepare($sql); $stmt->execute(); $sql = $pdo->query("SELECT count(user_data.id) as maxcount FROM user_data,user_pr WHERE user_data.id=user_pr.user_id;"); $rec = $sql->fetch(PDO::FETCH_ASSOC); $maxcount=$rec["maxcount"]; $maxcount=ceil($maxcount/5); foreach ($stmt as $row) { echo '<a href="human_detail.php?EN=" target="_blank">'; echo 'EngineerNo.'.$row['id'].'<br />'; echo '<img src="" alt="">'; $birth = $row['birth_year'].sprintf('%02d', $row['birth_month']).sprintf('%02d', $row['birth_day']); echo '年齢:'.floor((date("Ymd")-$birth)/10000).'歳'; echo ' | '; echo '所在:'.$row['pref'].' '.$row['city']; echo ' | '; echo '専攻カテゴリー:'.$row['major_category']; echo ' | '; echo '専攻スキル:'.$row['major_skill']; echo ' | '; echo '契約可能時期:'.$row['cont_date'].'<br /><br />'; echo 'PR'.$row['introduction'].'<br /><br />'; echo '</a>'; echo '<hr>'; }

urlいぢれば動作確認できるのでページャは省略します。

人材をクリックすると人材詳細のページ(下記)を作りかけているのですが仕組みがいまいち分かりません。
イメージ説明

一覧がhuman_list.php
詳細がhuman_detail.php
として、まずhuman_list.phpのa href="human_detail.php?EN="の分部をどう組み込んでいけばよいかが分かりません。

仮にa href="human_detail.php?EN=1"だったとして
human_detail.php?EN=1に飛びます。

user_dataテーブル
user_prテーブル
user_skillテーブル
human_detail.phpではこの3つのテーブルの情報が必要なので下記のSQLは必要だと思います。

sql

1SELECT UD.id, UP.user_id, US.user_id 2FROM user_data UD 3LEFT JOIN user_pr UP ON UD.id = UP.user_id 4LEFT JOIN user_skill US ON UD.id = US.user_id;

human_detail.phpは、誰の情報を表示するか?のページなわけですが
それはa href="human_detail.php?EN=1"の分部でURLはゲットできます。

それをSQLで取得する際の方法が分かりません。

単に1テーブルだけを取得するなら分かります。

$EN = filter_input(INPUT_GET, 'EN'); $sql = sprintf("SELECT * FROM user_data WHERE id = %d"$EN)

これを

sql

1SELECT UD.id, UP.user_id, US.user_id 2FROM user_data UD 3LEFT JOIN user_pr UP ON UD.id = UP.user_id 4LEFT JOIN user_skill US ON UD.id = US.user_id;

と組み合わせるのが分かりません。

色々試しているのですがうまくいきません。
イメージ説明

色々話が脱線してる部分もあるかもしれませんが、
アドバイスいただきたいです。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

sql

1SELECT UD.id, UP.user_id, US.user_id 2FROM user_data UD 3LEFT JOIN user_pr UP ON UD.id = UP.user_id 4LEFT JOIN user_skill US ON UD.id = US.user_id 5WHERE UD.id = ? 6

投稿2016/06/26 07:41

退会済みユーザー

退会済みユーザー

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

earnest_gay

2016/06/26 07:44

どのテーブルのidかってことだったんですね... ありがとうございます。 少し前進しそうです。
退会済みユーザー

退会済みユーザー

2016/06/26 07:46

sprintfは使っちゃいけない場面ですよ。
earnest_gay

2016/06/26 07:47

少し気になったところがあるので教えていただきたいのですが、 質問の最下部にあるコマンドプロントでの画像なんですが +----+---------+---------+ | id | user_id | user_id | +----+---------+---------+ | 22 | 22 | 22 | | 22 | 22 | 22 | | 23 | 23 | 23 | | 23 | 23 | 23 | のように2回づつ表示されていますが、 これは問題はとくになくこういうものなんでしょうか?
退会済みユーザー

退会済みユーザー

2016/06/26 07:50

まとめたい場合は, GROUP BY field_name を加えます。
earnest_gay

2016/06/26 07:55

すいません、まとめたいといいますとどういうことでしょうか? 本来このように表示されるべきだと思うのですが、何故2回づつ表示されているのかが理解できないです... +----+---------+---------+ | id | user_id | user_id | +----+---------+---------+ | 22 | 22 | 22 | | 23 | 23 | 23 | | 24 | 24 | 24 | ...................
退会済みユーザー

退会済みユーザー

2016/06/26 07:59

2回というわけではなく、 実際に入っているデータによります。 user_data : user_pr = 1 : a user_data : user_skill = 1 : b のとき、 1 * a * b の行が出力されます。
earnest_gay

2016/06/26 08:10 編集

なるほど! 確かにスキルには2レコード分入ってました! id22の人のスキルが2個あるからそれに合わせて2回表示されているというわけですね! それは理解したうえで、なぜGROUP BY field_nameがでてくるのでしょうか?
退会済みユーザー

退会済みユーザー

2016/06/26 09:22

のちに必要になるとは思いますが、HTMLの票を描画する時に、foreach で回したり、先のPagerとの兼ね合いをどのように解決しますか?
earnest_gay

2016/06/26 09:35

そちらはまだ考えていないです... また別で質問することになると思います。 今回はありがとうございました!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問