2016-10-23 4 views
0

数日前から、この1つの問題の解決策は、結合されたテーブルからのデータのソートに関しては見つかりませんでした。mySQLのソート問題JOIN

私はレストランの旅程をユーザー向けに作っています。各ユーザーには、旅程にレストランがいくつかあります。

私は2つのテーブルを持っています.1つは、ユーザーの旅程に関する情報(いつ​​レストランを訪れるか、レストラン)と、私が知っているすべてのレストランに関する情報を含むテーブルです。

ガイド ...................と.............. レストラン

userid    ---> id 
restaurant1_id -->--|  name 
date1    |  style 
restaurant2_id -->--|  address 
date2 

「restaurant1_id」または「restaurant2_id」はレストランテーブルの「id」に対応します。だから私はこのように、これらのテーブルを結合するインナーです:

SELECT restaurants.name AS name, restaurants.style AS style, restaurants.address AS address, guides.date1 AS date1, guides.date2 AS date2 
FROM `guides` 
INNER JOIN `restaurants` 
    ON guides.restaurant1_id = restaurants.id or guides.restaurant2_id = restaurants.id 
WHERE guides.userid = 2 

は私が「2」訪問されたIDを持つレストランのユーザーのすべての情報の全てを見てみたいと思いますと言います。私はフィドル hereを作成

$result = $conn->query($sql); 
    if ($result->num_rows > 0) { 
    while($row = $result->fetch_assoc()) { 
     echo 
     $row['name'].'<br>' 
     .$row['style'].'<br>'  
     .$row['address'].'<hr>' ; 
     } 
    } 
else { 
    echo 'No results.'; 
    } 

:次のクエリでは、私は、所望の結果を取得しています。

問題が発生している場合は、結果を並べ替えています。私は "guide2_id"の前に表示する "guide1_id"として "ガイド"テーブルで参照されているレストランをお勧めします。

もう一つの問題は日付です。私は 'restaurant1_id'の名前の隣に 'date1'を表示する方法を理解できません。

すべてのデータを変数に保存する必要がありますか、これにはより良い方法がありますか?私は何か提案を感謝します!

+0

大きな問題は、あなたが複数の行が戻されますことのようです。私は、レストランごとに1度、レストランのテーブルに複数回参加したいと思う。 – Kickstart

+0

あなたの提案をお寄せいただきありがとうございます。キックスタート。しかし、ガーデンAppleはその問題の解決策を見つけました。 – Rens

答えて

0

てみクエリ

SELECT IF(guides.restaurant1_id = restaurants.id, 1, 0) as srt , 
    restaurants.name AS name, restaurants.style AS style, 
    restaurants.address AS address, guides.date1 AS date1, guides.date2 AS date2 
    FROM `guides` 
INNER JOIN `restaurants` ON guides.restaurant1_id = restaurants.id or guides.restaurant2_id = restaurants.id 
WHERE guides.userid = 2 
order by srt DESC 

表示結果:

$result = $conn->query($sql); 
if ($result->num_rows > 0) { 
while($row = $result->fetch_assoc()) { 
    echo 
    $row['name'].'<br>' 
    .($row['srt']?$row['date1']:$row['date2']).'<br>' 
    .$row['style'].'<br>'  
    .$row['address'].'<hr>' ; 
    } 
} 
else { 
    echo 'No results.'; 
} 
+0

これは完全に機能します。本当にありがとう。そして2つ以上のレストランで動作するように変更することができました。 – Rens