2016-04-02 12 views
1

誰かが私が持っていたmysql/phpの問題を明らかにしてくれるかどうか疑問に思っていました。ジョイントテーブルから選択

次の2つの表があります。

表:Postedposts

|id   |textid  |modelid  |timeposted | 
|1   |2   |1   |0000-00-00 00:00:00| 

表:テキスト

|textid  |text  | 
|2   |hello  | 

私はランダムにTEXTIDが特定modelidのテーブルPostedpostsに挿入されていないテーブルのテキストから1つのテキスト値を選択する必要があります。これが結果を返さない場合は、過去7日間に特定のmodelidのテーブルPostpostsにtextidが挿入されていないtable textから1つのテキスト値をランダムに選択する必要があります。

これまでのところ、私は最初の問題のために次のコードを持っていますが、特定のmodelidに制限する方法を考えることはできません。

$sql=" 
     select Text.textid,Text.text 
     from Text left join Postedposts on Text.textid = Postedposts.textid 
     where ((Postedposts.textid IS NULL)) ORDER BY RAND() LIMIT 1 
"; 


$result=mysqli_query($conn,$sql); 
$row=mysqli_fetch_assoc($result); 
$text = $row['text']; 

何か助けがあれば幸いです。

ありがとうございます。

答えて

0

HAVING句が機能するはずです。以下のような

何か:

select Text.textid,Text.text 
    from Text left join Postedposts on Text.textid = Postedposts.textid 
    where ((Postedposts.textid IS NULL)) HAVING modelid = 123 ORDER BY RAND() LIMIT 1 
+0

残念ながら、これは動作していないようです。 – melonsf0rsale

0

はケースで誰もが、私は最終的には、以下でこれを自分で解決思っていた:

$modelid = 1; 
$minustime = date('Y-m-d H:i:s', strtotime('-7 days')); 

$sql = "SELECT a.* 
FROM Text a 
LEFT JOIN Postedposts b 
    ON a.textid = b.textid AND 
     b.modelid = ".$modelid." 
AND b.timeposted > '".$minustime."' 
WHERE (b.textid IS NULL) ORDER BY RAND() LIMIT 1"; 

$result = $conn->query($sql); 
if ($result->num_rows > 0) { 

while($row = $result->fetch_assoc()) { 

$text = $row['text']; 

echo "<br><br>".$text; 

} 

} 
else 
{ 
echo "no rows"; 
} 

私はこれを向上させることができる場合は/どのように教えてください? ありがとう

関連する問題