2017-06-26 18 views
0

すべてのテーブルに参加したい、すべてのテーブルですべてのカラム名が同じです。私の質問は以下の通りです。データを取得するのを手伝ってください。 NOTはplay_schooltoken_id VARCHAR(255)NOT NULL、 idのint(11)NOT NULL AUTO_INCREMENT、NULL ad_id VARCHAR(255)NOT NULLでない titleテキスト、 category varchar型を存在する場合
私のテーブル構造は、CREATE TABLE NULL NOT(255)NOT NULL、 nameテキスト、NOT NULL、 image VARCHAR(255)NOT NULLと、 contentテキスト、NOT NULLを offerテキスト、 noteテキストNOT NULLを、 price VARCHAR(255)NOT NULL、 address VARCHAR(255)NOT NULLと、 contact_noテキスト、NOT NULL、 email_idテキスト、NOT NULL、 timestamp日、NOT NULL、 status VARCHAR(255)NOT NULLと、 PRIMARY KEY(id )、 UNIQUE KEY token_idtoken_id)、 UNIQUE KEY token_id_2token_id) )ENGINE =のInnoDB DEFAULT CHARSET = LATIN1 AUTO_INCREMENT = 49。テーブルphp mysqlに参加

すべてのテーブルの構造はcar_showroom、コーチング、電子などのplay_schoolテーブルと同じです。すべてのテーブルのad_id = 'xyz'は同じで、get idも 'xyz'です。データを取得したいのですがすべてのテーブルのad_id = 'xyz'。 このクエリはエラーなしで実行されています。データをフェッチしませんでした。

$email_id = $_GET['id']; 

$result = $con->prepare("SELECT * FROM bike_showroom 
    JOIN car_showroom 
    JOIN coaching 
    JOIN college 
    JOIN electronic 
    JOIN furniture_showroom 
    JOIN hospital 
    JOIN job 
    JOIN mobile_shop 
    JOIN pets_shops 
    JOIN play_school 
    JOIN real_estate 
    JOIN services 
    JOIN shopping_store 
    JOIN stationary_shops 
    JOIN sweet_shop 
    WHERE bike_showroom.ad_id = '".$email_id. 
     "' AND car_showroom.ad_id = '".$email_id. 
     "' AND coaching.ad_id = '".$email_id. 
     "' AND college.ad_id = '".$email_id. 
     "' AND electronic.ad_id = '".$email_id. 
     "' AND furniture_showroom.ad_id = '".$email_id. 
     "' AND hospital.ad_id = '".$email_id. 
     "' AND job.ad_id = '".$email_id. 
     "' AND mobile_shop.ad_id = '".$email_id. 
     "' AND pets_shops.ad_id = '".$email_id. 
     "' AND play_school.ad_id = '".$email_id. 
     "' AND real_estate.ad_id = '".$email_id. 
     "' AND services.ad_id = '".$email_id. 
     "' AND shopping_store.ad_id = '".$email_id. 
     "' AND stationary_shops.ad_id = '".$email_id. 
     "' AND sweet_shop.ad_id = '".$email_id."' "); 

$result->execute(); 
$row = $result->fetch(); 
for($i=0; $row = $result->fetch(); $i++){ 
    echo $row['title']; 
} 
+0

これらのテーブルとJOINの共通の関係を見つける必要があります。また、 '$ email_id'を持つすべてのテーブルに行がない限り、この場合は動作しません。おそらく、あなたのアプローチを再考する必要があります。通常、一度に複数のテーブルに加わることは望ましくありません。 – Cfreak

+0

さて、それは働いていますか?ほとんど働いている?全く働いていない?エラーログはありますか?予想される出力は何ですか?問題の内容がわからないと、どうすれば私たちを助けることができますか? – crizzis

+1

また、クエリはSQLインジェクションに対して脆弱です。あなたは間違いなくそれを修正したい。あなたはそれが何であるか、そしてここでそれを修正する方法について読むことができます:http://bobby-tables.com/ – Cfreak

答えて

0
1. If you want to JOIN tables , you need to JOIN them ON common fields. 

2. The WHERE clause that you are using is not a JOIN parameter, but a FILTER. 

3. You cannot possibly design a database where you JOIN one table with 20 more tables. 

4. An example for you to understand. You have 2 tables, orders and orders_items 

    table each order may contain several items that is why you need a second table called order_items. This table will have a column called order_id which will link to its parent table (ORDERS) and ON its id field. 

You asked help to join the tables. I have given you the understanding you need. You are not showing us your tables, so we cannot possibly do the JOINS for you. This is the best you can get for your question. Lucky you 
have not been downvoted. 
+0

返信ありがとうございます。 –

0

あなたがUNION句を使用する必要があります。

$email_id = $_GET['id']; 
$result = $con->prepare("SELECT * FROM (
    SELECT * FROM bike_showroom 
    UNION ALL 
    SELECT * FROM car_showroom 
    UNION ALL 
    SELECT * FROM coaching 
    UNION ALL 
    SELECT * FROM college 
    UNION ALL 
    SELECT * FROM electronic 
    UNION ALL 
    SELECT * FROM furniture_showroom 
    UNION ALL 
    SELECT * FROM hospital 
    UNION ALL 
    SELECT * FROM job 
    UNION ALL 
    SELECT * FROM mobile_shop 
    UNION ALL 
    SELECT * FROM pets_shops 
    UNION ALL 
    SELECT * FROM real_estate 
    UNION ALL 
    SELECT * FROM services 
    UNION ALL 
    SELECT * FROM shopping_store 
    UNION ALL 
    SELECT * FROM stationary_shops 
    UNION ALL 
    SELECT * FROM sweet_shop) as t WHERE ad_id = '".$email_id."'"); 

$result->execute(); 
$row = $result->fetch(); 
for($i=0; $row = $result->fetch(); $i++){ 
    echo $row['title']; 
}