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

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

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

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

Q&A

解決済

2回答

1483閲覧

php 2つのテーブル情報を同じテーブル内で表示させたい

earnest_gay

総合スコア615

PHP

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

0グッド

0クリップ

投稿2016/08/29 08:04

編集2016/08/29 08:38

DBから情報を取得して、表示させたいのですが、別のテーブルも交じってくると表示をさせる記述がなかなか
思いつきません。

例えば賃貸住宅物件を扱うサイトがあったとします。

簡単にテーブルが
・companys(会社情報のテーブル)
・users(会社に勤める社員情報のテーブル)
・articles(社員が投稿した物件情報のテーブル)
とあったとします。

下記のソースで表示させているのはarticlesテーブルに入っている物件情報です。
しかし、1か所だけcompanysテーブルのcompanyNameカラムを表示させたいのです。

<td>※※※※※※※※※※※</td> の部分です。

1つのテーブルだけの表示なら、ステートメントをそのままforeachに使えばいいのですが
別のテーブルも交じってくるとどう記述していいのか悩んでいます。

bodyのforeach内で更にforeachするようなイメージしか湧かなくてハマッてしまっています...

<?php $sql = " SELECT * FROM articles WHERE id AND title LIKE ? ORDER BY id DESC LIMIT 10; "; $search = htmlspecialchars('%'.filter_input(INPUT_GET,"searchs").'%'); $bodys = $pdo->prepare($sql); $bodys->execute([ $search ]); ?> <table border="" width="100%"> <caption>物件一覧</caption> <thead> <tr> <th>NO</th> <th>タイトル</th> <th>概要</th> <th>間取</th> <th>建物種別</th> <th>賃料</th> <th>敷金/礼金</th> <th>管理会社</th> <th>公開日</th> </tr> </thead> <tbody> <?php foreach($bodys as $body){ ?> <tr> <td><?php echo $body['id']; ?></td> <td><?php echo $body['title'] ?></td> <td><?php echo $body['body'] ?></td> <td><?php echo $body['floorplan'] ?></td> <td><?php echo $body['buildingtype'] ?></td> <td><?php echo number_format($body['rento']) ?></td> <td><?php echo sprintf('%.1f', ($body['deposit'] / $body['rento']))."/".sprintf('%0.1f', ($body['keymoney'] / $body['rento'])) ?></td> <td><?php echo $user['surname'] ?></td> <td><?php echo date('Y年m月d日', strtotime($body['created'])); ?></td> </tr> <?php } ?> </tbody> </table>

追記
SQL分けることが前提になってたから思いつきませんでした...
こういう場合は多分、Joinしないといけないんですよね?
じゃないと2重foreachのイメージしかわかない...

一応回答待ってみます。

MariaDB [test]> SHOW CREATE TABLE companys; SHOW CREATE TABLE users; SHOW CREATE TABLE articles +----------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ | Table | Create Table | +----------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ | companys | CREATE TABLE `companys` ( `id` int(11) NOT NULL AUTO_INCREMENT, `campanyName` varchar(50) NOT NULL, `created` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, PRIMARY KEY (`id`) ) ENGINE=MyISAM AUTO_INCREMENT=6 DEFAULT CHARSET=utf8 | +----------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ 1 row in set (0.02 sec) +-------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ | Table | Create Table | +-------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ | users | CREATE TABLE `users` ( `id` int(10) unsigned NOT NULL AUTO_INCREMENT, `company_id` int(11) NOT NULL, `username` varchar(50) CHARACTER SET latin1 DEFAULT NULL, `password` varchar(255) CHARACTER SET latin1 DEFAULT NULL, `surname` varchar(20) COLLATE utf8_unicode_ci NOT NULL, `name` varchar(20) COLLATE utf8_unicode_ci NOT NULL, `role` varchar(20) CHARACTER SET utf8 DEFAULT NULL, `created` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, `modified` datetime DEFAULT NULL, PRIMARY KEY (`id`) ) ENGINE=MyISAM AUTO_INCREMENT=7 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci | +-------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ 1 row in set (0.00 sec) -> ; +----------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ | Table | Create Table | +----------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ | articles | CREATE TABLE `articles` ( `id` int(11) NOT NULL AUTO_INCREMENT, `user_id` int(11) NOT NULL, `title` varchar(30) COLLATE utf8_unicode_ci NOT NULL, `area` varchar(50) COLLATE utf8_unicode_ci NOT NULL, `buildingtype` varchar(10) COLLATE utf8_unicode_ci NOT NULL, `floorplan` varchar(10) COLLATE utf8_unicode_ci NOT NULL, `rento` int(11) NOT NULL, `deposit` int(11) NOT NULL, `keymoney` int(11) NOT NULL, `body` text COLLATE utf8_unicode_ci NOT NULL, `created` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, `modified` datetime NOT NULL, PRIMARY KEY (`id`) ) ENGINE=MyISAM AUTO_INCREMENT=101 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci |

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

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

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

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

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

ao_love

2016/08/29 08:20

JOINするのがいいと思いますが、各テーブルの構造がわかれば回答が得やすいかと思います。
退会済みユーザー

退会済みユーザー

2016/08/29 08:25

SHOW CREATE TABLE companys; SHOW CREATE TABLE users; SHOW CREATE TABLE articles; で得られる結果を追記してください。
guest

回答2

0

ベストアンサー

SQL

1SELECT 2 a.`id` 3 , a.`user_id` 4 , a.`title` 5 , a.`area` 6 , a.`buildingtype` 7 , a.`floorplan` 8 , a.`rento` 9 , a.`deposit` 10 , a.`keymoney` 11 , a.`body` 12 , a.`created` 13 , a.`modified` 14 , c.`campanyName` 15FROM articles a 16INNER JOIN users u ON a.`user_id` = u.`id` 17INNER JOIN companys c ON u.`company_id`= c.id

投稿2016/08/29 08:45

退会済みユーザー

退会済みユーザー

総合スコア0

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

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

earnest_gay

2016/08/29 09:17

ありがとうございます!
退会済みユーザー

退会済みユーザー

2016/08/29 09:43 編集

> $search = htmlspecialchars('%'.filter_input(INPUT_GET,"searchs").'%'); これ、あかんでしょ! 毎度突っ込みどころ満載ですね。以前の回答、指摘が生かされないのがなんとも残念です。
guest

0

WHERE id AND title LIKE ?

「id AND」は、いります?
これを書いてもidが0以外すべて対象ですし・・・

PHP

1$stmt = $pdo->prepare( $sql); 2$stmt->execute([$search]); 3$bodys=$stmt->fetchAll(PDO::FETCH_ASSOC); 4foreach($bodys as $ body){ 5//出力 6}

みたいな感じではないでしょぅか?

投稿2016/08/29 08:26

yambejp

総合スコア114814

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

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

earnest_gay

2016/08/29 08:40

とりあえずサンプル作ってる段階なので検索にidを使っているのはテストとかのためです。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問