PHP Сделать 2 разных строки таблицы базы данных соотносятся друг с другом - PullRequest
0 голосов
/ 27 февраля 2019

enter image description here Я работаю над получением данных из конкретной базы данных.Мне нужно работать с 3 разными столбцами: «nid», «vid» и «title».Как только я получу 'vid', у него будет самое высокое значение, я должен получить контент, который является 'title', но я должен получить его из строки, которая соответствует наибольшему значению 'vid'.Например, если для vid установлено значение 1253, мне нужно извлечь содержимое из заголовка, соответствующего vid 1253. Как мне его кодировать, чтобы получить заголовок с vid 1253. Мне нужно, чтобы эти две строки соответствовали друг другу.Это какой-то тип строки запроса, я должен сделать.Мне нужен оператор запроса?

$queryNodeRevision = "SELECT nid, MAX(vid) as vid, title FROM node_revision GROUP BY nid";
    // line above creates variable $queryNodeRevision > selects column "nid" from table "node_revision"

    $results = mysqli_query($connection, $queryNodeRevision) or die("Bad Query: $results");
    // line above creates variable $results > actually queries that database and passes in variable "$queryNodeRevision"

    $storeNIDAndVIDValues = [];

    for ($i = 0; $i < 8000; $i++) {
      $storeNIDAndVIDValues[$i] = 0;
      // line above assigns initial 'vid'; starts at 0
    }

    while ($row = mysqli_fetch_array($results)) {
      $currentNID = $row['nid'];
      $currentVID = $row['vid'];
      $theTitleIWant = $row['title'];
    if ($currentVID > $storeNIDAndVIDValues[$currentNID]) {
        $storeNIDAndVIDValues[$currentNID] = $currentVID;
        echo "<h1>" . $row['title'] . "</h1>";[![enter image description here][1]][1]
    } 
    } // line closes while loop

Обновленный код:

<?php
    // Establish all database credential variables
    $serverName = "localhost";
    $username = "root";
    $password = "root";
    $databaseName = "redesign_static";

    // Create Database Connection
    $connection = new mysqli($serverName, $username, $password, $databaseName);

    // Check Database Connection
    if ($connection->connect_error) {
      die("Connection failed:" . $connection->connect_error);
    } // line ends if statement

    $queryNodeRevision = "SELECT nid, vid, title FROM node_revision WHERE vid in (SELECT max(vid) FROM node_revision);";
    // line above creates variable $queryNodeRevision > 

    $results = mysqli_query($connection, $queryNodeRevision) or die("Bad Query: $results");
    // line above creates variable $results > actually queries that database and passes in variable "$queryNodeRevision"

    while ($row = mysqli_fetch_array($results)) {
      $currentNID = $row['nid'];
      $currentVID = $row['vid'];
      $theTitleIWant = $row['title']; 
      echo "<h1>" . $row['title'] . "</h1>";
      // line prints out desired 'title' into h1 tag
    } // line closes while loop
  ?>

1 Ответ

0 голосов
/ 27 февраля 2019
SELECT node_revision.nid, node_revision.vid, node_revision.title 
FROM node_revision 
JOIN
(
    SELECT nid, max(vid) as vid 
    FROM node_revision 
    GROUP BY nid
) as nr
ON node_revision.nid = nr.nid 
AND node_revision.vid = nr.vid

Небольшое объяснение:

Чтобы получить самый высокий vid для каждого nid, как вы уже сделали:

SELECT nid, max(vid) as vid FROM node_revision GROUP BY nid

К которому вы присоединяетесь node_revisionчтобы получить название самого высокого VID для каждого NID:

SELECT node_revision.nid, node_revision.vid, node_revision.title FROM 
node_revision 
JOIN ( <rows with highest vid for each nid> ) as nr
ON node_revision.nid = nr.nid AND node_revision.vid = nr.vid
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...