2016-04-02 3 views
1

Мне было интересно, может ли кто-нибудь пролить свет на проблему mysql/php, которую я имел.Выберите из совместных таблиц php/mysql

У меня следующие две таблицы.

Таблица: Postedposts

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

Таблица: Текст

|textid  |text  | 
|2   |hello  | 

Мне нужно случайным образом выбрать одно текстовое значение из таблицы текста, где textid никогда не был вставлен в таблицу Postedposts для конкретного ModelID. Если это не возвращает никаких результатов, мне нужно случайным образом выбрать одно текстовое значение из таблицы Text, где текст не был вставлен в таблицу. Добавлены значения для конкретной модели в течение последних 7 дней.

До сих пор у меня есть следующий код для начальной проблемы, но я не могу решить, как ограничить его конкретным 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"; 
} 

Пожалуйста, дайте мне знать, если/как это можно улучшить? Thanks

Смежные вопросы