Есть ли способ выбрать строку таблицы с определенным значением столбца, которая также отображает номер строки из исходноPhp

Кемеровские программисты php общаются здесь
Ответить Пред. темаСлед. тема
Anonymous
 Есть ли способ выбрать строку таблицы с определенным значением столбца, которая также отображает номер строки из исходно

Сообщение Anonymous »

Я пытаюсь создать полнофункциональное веб-приложение CRUD, используя mysql через phpmyadmin, которое будет отправлено в экспресс-интерфейс (это мой первый раз, когда я работаю с SQL и PHP, поэтому прошу прощения за мои ошибки или недостаток знаний). ) Например, моя таблица на PHP:

Код: Выделить всё

ID  Name  Time      Date

1   COR   01:40:37  01/24/24

2   BING  01:39:38  01/23/24

значения которых были вставлены пользователем. Возможно ли следующее?
Сначала получив номер строки и отсортировав ее по времени:

Код: Выделить всё

ID  Name   Time      Date       Rn

2   BING   01:39:38  01/23/24   1

1   COR    01:40:37  01/24/24   2
Однако мне нужен только следующий вывод при поиске «BING»:

Код: Выделить всё

ID  Name   Time      Date      Rn

2   BING   01:39:38  01/23/24  1
Моя функция поиска:

Код: Выделить всё

async searchByName(name) {
try{
const response = await new Promise((resolve, reject) => {
const query = "SELECT *, ROW_NUMBER() OVER (ORDER BY time) rn FROM medley_relay; SELECT * FROM medley_relay WHERE name = ?;";
// try separating the two queries
connection.query(query, [name], (err, results) => {
if (err) reject(new Error(err.message));
resolve(results);
})
});
console.log(response)
return response;
} catch (error) {
console.log(error);
}
}
Это вызывает:

Код: Выделить всё

app.get('/search/:name', (request, response) => {
const {name} = request.params;
const db = dbService.getDbServiceInstance();

const result = db.searchByName(name);

result
.then(data => response.json({data : data}))
.catch(err => console.log(err));
console.log(result);
})
и активируется через внешний интерфейс с помощью элемента ввода HTML:

Код: Выделить всё

const searchBtn = document.querySelector('#search-btn');

searchBtn.onclick = function() {
const searchValue = document.querySelector('#search-input').value;

fetch('http://localhost:5000/search/' + searchValue)
.then(response => response.json())
.then(data => loadHTMLTable(data['data']));
}
Моя функция loadHTMLTable:

Код: Выделить всё

function loadHTMLTable(data) {
const table = document.querySelector('table tbody');

console.log(data);

if (data.length === 0) {
table.innerHTML = "No DataNo Data";
return;
}

let tableHtml = "";

data.forEach(function ({id, name, time, date, rn}) {

tableHtml += "";
tableHtml += `${rn}`;
tableHtml += `${name}`;
tableHtml += `${time}`;
tableHtml += `${new Date(date).toLocaleDateString()}`;
tableHtml += `Delete`;
tableHtml += `Edit`;
tableHtml += "";

});

table.innerHTML = tableHtml;

}
Если я использую только запрос:

Код: Выделить всё

const query = "SELECT * FROM medley_relay WHERE name = ?;";
и имя передается, я получаю неопределенное значение для rn, поскольку оно не было определено с помощью функции ROW_NUMBER. Однако когда я добавляю ФУНКЦИЮ ROW_NUMBER, я получаю:

Код: Выделить всё

[
[
RowDataPacket {
id: 15,
name: 'Corning',
time: '01:40:15',
date: 2024-04-10T04:00:00.000Z,
rn: 1
},
RowDataPacket {
id: 16,
name: 'Binghamton',
time: '01:52:42',
date: 2024-04-02T04:00:00.000Z,
rn: 2
}
],
[
RowDataPacket {
id: 16,
name: 'Binghamton',
time: '01:52:42',
date: 2024-04-02T04:00:00.000Z
}
]
]
с неопределенными значениями по всей таблице. Есть ли способ сделать это без получения вложенного массива и только массива с индексом [0][1]? Сейчас мой запрос на загрузку данных из массива без ограничения каким-либо именем выглядит так:

Код: Выделить всё

app.get('/getAll', (request, response) => {
const db = dbService.getDbServiceInstance();

const result = db.getAllData();

result
.then(data => response.json({data : data}))
.catch(err => console.log(err));
})
и

Код: Выделить всё

async getAllData() {
try{
const response = await new Promise((resolve,reject) => {
const query = "SELECT *, ROW_NUMBER() OVER (ORDER BY time) rn FROM medley_relay ORDER BY rn;"
"SELECT * FROM medley_relay;";
connection.query(query, (err,results) => {
if (err) reject(new Error(err.message));
resolve(results);
})
});
return response;
} catch (error) {
console.log(error);
}
}
В этом случае оба этих запроса работают правильно, и моя таблица работает правильно. Почему, когда я меняю «SELECT * FROM medley_relay;» на «SELECT * FROM medley_relay WHERE name = ?;» оно перестает работать?

Подробнее здесь: https://stackoverflow.com/questions/783 ... -that-also
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «Php»