2014-01-13 4 views
0

Я пытаюсь создать динамическую таблицу html, которая состоит из данных из 2 таблиц в базе данных sql. Одна таблица в db будет содержать имена моделей, рейтинги пользователей этих моделей и их IP-адрес для ограничения рейтингов на IP. В другой таблице будут храниться сведения о моделях, например, о возрасте, местоположении и т. Д. Для этого я подумывал об использовании внутреннего соединения, чтобы оценки из таблицы 1 соответствовали правильной персоне (персонам) информации из таблицы2. Я довольно новичок во всем этом, но из того, что я прочитал, похоже, что я не мог бы иметь переменную, определенную пользователем sql, в качестве запроса. Поскольку таблица, которая содержит рейтинги, будет иметь несколько записей для каждой модели с разными рейтингами, я пытаюсь ее выработать, чтобы рейтинг, который отображается в моей таблице html, будет средним рейтингом для этой модели. Мой первый вопрос - просто подтвердить, что SQL User Defined Variables не может быть SQL-запросом? Если нет, то какой другой метод я мог бы использовать, чтобы иметь вид запроса внутри внутреннего запроса на соединение?SQL User Defined Variables как SQL Query

Это работает, но не совсем то, что я хочу:

$query = "SELECT table2.Rating, table2.Model, table1.Age, table1.Country 
         FROM table1 
         INNER JOIN table2 
         ON table2.Model= table1.Model 
         ORDER BY table2.Rating DESC 
         LIMIT 5"; 

$query5 = mysqli_query($link, $query);    



echo "<table border='1'> 
<tr> 
<th>Rating</th> 
<th>Name</th> 
<th>Age</th> 
<th>Country</th> 
</tr>"; 

while($row = mysqli_fetch_array($query5)) 
    { 
    echo "<tr>"; 
    echo "<td>" . $row['Rating'] . "</td>"; 
    echo "<td>" . $row['Name'] . "</td>"; 
    echo "<td>" . $row['Age'] . "</td>"; 
    echo "<td>" . $row['Country'] . "</td>"; 
    echo "</tr>"; 
    } 
echo "</table>"; 

Я хотел бы, чтобы «Модель» в внутреннее соединение выше на самом деле быть DISTINCT, как это:

$query = "SELECT DISTINCT Model FROM Table2"; 

    $run = mysqli_query($link, $query); 

И для «рейтинга», чтобы быть AVG («Рейтинг»), как это:

$query = 'SELECT AVG(Rating) FROM Table2'; 

$quit = mysqli_query($link, $query); 

      $run = mysqli_fetch_array($quit); 
+0

К сожалению, предназначено для обновления ... teen2 = table2. Таблица 2 будет содержать рейтинги пользователей, имена моделей и собирать IP-адреса. Таблица 1 будет содержать основную информацию о моделях, таких как местоположение и т. Д. – nickatnite

ответ

0

похоже, что вы хотите использовать резюме сырого table2, например, так:

SELECT Model, AVG(Rating) 
    FROM table2 
    GROUP BY Model 

Если я правильно понимаю вашу структуру таблицы адекватно, что дает результирующий набор, содержащий каждую модель и ее средний рейтинг. Итак, теперь вы используете это в своем основном запросе вместо своего исходного таблицы2. Вот как это работает:

SELECT a.Rating, 
     a.Model, 
     table1.Age, table1.Country 
    FROM table1 
INNER JOIN (
      SELECT Model, 
        AVG(Rating) AS Rating 
      FROM table2 
      GROUP BY Model 

      ) AS a ON a.Model= table1.Model 
ORDER BY a.Rating DESC 
LIMIT 5 

Хитрость здесь, чтобы положить в на Structured Structured Query Language, понимая, что вы можете использовать виртуальную таблицу, также известный как подзапрос, в любом месте вы можете использовать таблицу ,

+0

Спасибо за ответ! Можете ли вы объяснить, как работают «a.Rating» и «a.Model»? Не могли бы вы подробнее рассказать о том, как работают подзапросы? Похоже, вы понимаете, что я пытаюсь сделать, но являюсь новичком. Мне трудно понять ха-ха. – nickatnite

+0

См., Например, http://www.akadia.com/services/sqlsrv_subqueries.html. –

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