私は、製品names
を保持するテーブルを持っているdescription
、prices
など、別のテーブルは、管理者は最初のテーブルを展開するカスタム列を追加することができましたがあります。これらの列は、PHPフォームを通じて作成されます。私はどのくらい多くのユーザーが作成されるのかわからない。mysqlの選択2つのテーブルからのデータが、第二の表では、ダイナミックセル名
id
name
description
price
created
を第二のテーブル"products_customは"があります:
例えば私"製品"のテーブルがあり
id
product_id //this value holds the product id from the above table
serial_number //a custom column the user created
product_image //another column the user created
さて、これらのすべての値を表示するために、テーブルは、products.id
とproducts_custom.product_id
に基づいて2つのテーブルをLEFT JOINする必要があります。
適切なSQLクエリは次のようになります。
SELECT p.*, pc.serial_number, pc.product_image FROM products AS p
LEFT JOIN products_custom as pc ON p.id = pc.product_id ORDER BY p.id ASC
私はそうでそれらを使用するためにこれらの値を持つ第二のテーブルを照会するPHPの関数を使用してproducts_customテーブルに存在するセル名を取得することができます上記のクエリは問題ではありません。これらの列名を変数に戻すことができます。
(example: $mycolumns = "serial_number,product_image")
この問題は、ここでもうまくいきます。
SELECT p.*, serial_number,product_image FROM products AS p
LEFT JOIN products_custom ON p.id = products_custom.product_id ORDER BY p.id ASC
これは機能しますか?私はそれのように残すことができますか?または私はPCを追加する必要があります。プレフィックスはすべて$mycolumns
の値を持っていますし、上記の「適切なクエリ」のように見えるようにsqlを再構築しますか?
ありがとうございます!
FINAL EDIT:回答に基づいて は、列名の文字列からpc.prefixを含めるようにSQLを変換するために、怒鳴る:
//$whatCol = "serial_number,product_image";
$choices = explode(",", $whatCol);
foreach($choices as &$choice) {
$choice = "pc.".mysql_real_escape_string($choice);
}
$whatColSQL = implode(",", $choices);
$prSQL = "SELECT p.*, $whatColSQL FROM products AS p LEFT JOIN products_custom as pc ON p.id = pc.product_id ORDER BY p.id ASC";
私は問題を理解していないと告白します – Strawberry
私の悪い、私は私の質問で徹底したかった...事を簡素化する... 私が書いた '適切なSQL'クエリはPCを使用しています。 2番目のテーブルの 'name'の接頭辞。 しかし、最後のSQLでは書いたが、私は気づかずにpcを使わずに列名を書くことに気づいた。また動作します...それは奇妙です...それはまた、それらの列のためにも最初のテーブルを検索する必要がありますか?なぜSQLクエリが機能しているのですか?それをそのまま残すことができますか? – user1033882
これらの列が両方のテーブルに存在すると、あいまいさが発生し、クエリが失敗します。だから、テーブル名/テーブルエイリアスにカラム名を含める方が良いでしょう。 – Strawberry