Postgres заказ по смене - PullRequest
       5

Postgres заказ по смене

0 голосов
/ 13 марта 2020

Я пытаюсь изменить порядок по идентификатору в моей базе данных Postgres вопросов.

По какой-то причине он упорядочен случайным образом, но я хочу, чтобы он был упорядочен по идентификатору AS C. * 1003. *

Я очень новичок в postgres, поэтому я не знаю, что я делаю ..,

Я просто хочу получить результат этого запроса:

SELECT * 
FROM public.questions
ORDER BY id ASC

, но Я не знаю, как обновить мою базу данных в том порядке, в котором отображается вывод запроса. Это не позволяет мне сохранить это, я знаю, что я делаю что-то не так. Как мне этого добиться?

Это текущий заказ, id идет как 1,2, затем 4

THIS IS THE CURRENT ORDER, ID GOES LIKE 1,2 THEN 4

Я хочу это чтобы выглядеть так в идеальном порядке по id 1,2,3,4

I WANT IT TO LOOK LIKE THIS IN PERFECT ORDER BY ID 1,2,3,4

Причина, по которой я хочу сделать это, потому что я хочу, чтобы мои вопросы мой контейнер должен отображаться в порядке по идентификатору, здесь мои коды, какие-нибудь мысли, как мне этого добиться?

class QuestionContainer extends React.Component {
  constructor() {
    super();
    this.state = {
      questions: [],
    };
    this.SubmitQuestion = this.SubmitQuestion.bind(this);
  }

  componentDidMount() {
    axios.get(`${env.url}/api/v1/en/questions?limit=100`).then((res) => {
      const qes = res.data.questions.map((a) => ({
        questionId: a.question_no,
        question: a.question,
      }));
      this.setState({ questions: qes });
    }, (err) => {
      console.log('Question fetch error ', err);
      this.setState({
        questions: [{
          questionId: 1,
          question: 'All',
        }],
      });
    });
  }

Ответы [ 2 ]

1 голос
/ 13 марта 2020

Есть несколько вещей:

  1. при извлечении кортежей не гарантируется, что они будут отсортированы согласованным образом. Они собраны в набор для скорости, который может быть случайным порядком. Способ применения порядка сортировки заключается в использовании предложения ORDER BY. Без него нет гарантии
  2. . Я бы посоветовал не использовать id (первичный ключ) в качестве упорядоченного столбца. Если порядок важен, я бы либо добавил в таблицу столбец order, либо я предпочел бы иметь поле метки времени. В вашем случае, однако, похоже, что question_no имеет порядок semanti c, поэтому я мог бы использовать его над id.
  3. ваш пример выглядит так, как будто он использует JavaScript React ; Вы можете получить заказ из базы данных или обновить его в логике презентации c. Ниже я использовал .sort((a,b)=>a.questionId - b.questionId), который является быстрым примером:

    const qes = res.data.questions.map((a) => ({
      questionId: a.question_no,
      question: a.question,
    })).sort((a,b)=>a.questionId - b.questionId);
    
  4. Если вы хотите попытаться получить его без сортировки, я думаю, вы можете передать аргумент топор ios API. Итак, эта строка:

    axios.get(`${env.url}/api/v1/en/questions?limit=100`)
    

    будет изменена на:

    axios.get(`${env.url}/api/v1/en/questions?orderBy=\"question_no\"&limit=100`)
    
1 голос
/ 13 марта 2020

Вы всегда должны добавить ORDER BY, если хотите, чтобы результат был в определенном порядке.

Таблицы имеют физический порядок, но в PostgreSQL, который изменяется всякий раз, когда вы изменить данные, и даже если вы не измените данные, вы не гарантированно получите результаты в определенном порядке.

...