Как назначить самое низкое значение индекса для новой строки или отсортировать в обратном порядке - PullRequest
0 голосов
/ 30 сентября 2019

У меня есть что-то вроде новостного тикера с элементами, хранящимися в строках mysql. Сначала я хочу отобразить самые последние новости, поэтому мне нужно перебирать таблицу по одной строке за раз от самых новых записей до самых старых. Я пытаюсь выполнить итерацию на основе столбца индекса с автоинкрементом, используя i ++ для увеличения значения индекса в операторе SELECT при каждом его вызове. Проблема в том, что это обеспечивает строки от самых старых до самых новых, но я хочу, чтобы самые новые и самые старые. Как отсортировать таблицу в обратном порядке, чтобы у самых новых записей было самое низкое значение индекса?

Мне известны ORDER BY ASC и DESC, но они применяются только к наборам результатов. В моем случае результирующий набор всегда будет только одной строкой, так что это не поможет. Мне нужно отсортировать саму таблицу так, чтобы новейшие записи имели самое низкое значение индекса, а не сортировать результирующие наборы.

Таблица выглядит примерно так:

id      news    country     source

Я надеюсь переставитьтаблица, так что номера идентификаторов от самого низкого до самого высокого соответствуют строкам таблицы от самого нового (добавленного последним) до самого старого

Ответы [ 2 ]

0 голосов
/ 03 октября 2019

Я сделал это так, потому что это то, с чем я знаком, и это работает

if( isset($_SESSION[i]) and $_SESSION[i]!= 1){
$_SESSION[i] = --$_SESSION[i];
} else {
$_SESSION[i] = 30;
}
$i = $_SESSION[i];
$sql = "SELECT newsitem FROM news WHERE id = $i";
$result = mysqli_query($con, $sql);
while($row = mysqli_fetch_assoc($result)) {
echo $row["newsitem"];
}

У меня проблемы с получением количества строк, чтобы ограничить таблицу 30, но это другоепредмет.

0 голосов
/ 30 сентября 2019

вы можете создать триггер, который будет корректировать новый идентификатор новостей каждый раз, когда вставляется новая строка

это будет выглядеть примерно так: Вставить> Триггер вызван> настроить первичный ключ

CREATE TRIGGER id_adjust BEFORE INSERT on news_table
FOR EACH ROW
BEGIN
    IF (SELECT count(*) FROM news_table)=0 THEN
        SET NEW.id=999;
    ELSE
        SELECT min(id)-1 into NEW.id from news_table;
    ENDIF;
END

это гарантирует, что последние новости всегда будут первой записью (с точки зрения идентификатора), но ваш индекс не будет начинаться с id = 1.

Вы также можете начать с index = 1, но если есть несколько записейв вашей таблице это будет означать, что вам придется обновлять каждую строку новым идентификатором, увеличивая обработку.

...