2013-05-03 1 views
2

Ниже у меня есть рабочая реализация запрашивая выбранную таблицу, $ таблицы, и возвращение $ NumRows рядов упорядоченных по убыванию по первой колонке таблицы:Существует ли более простой способ запроса на основе результата другого запроса?

$cQuery = "SELECT column_name FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME = '$table' LIMIT 1"; 

$mysqli = new mysqli(DB_LOCATION , DB_USERNAME , DB_PASSWORD); 
if ($mysqli -> connect_errno) 
    err("Could not connect to DB. " . $mysqli->connect_error); 

$result = $mysqli -> query($cQuery) -> fetch_array();  
$query = "SELECT * FROM $table ORDER BY $result[0] DESC LIMIT $numRows"; 

$result = $mysqli -> query($query); 

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

Любая критика приветствуется.

+0

Одд ... Я прочитал ваш окончательный запрос как: Получить верхний '$ numRows' от '$ table', упорядоченный по тому, что случайное имя_столбца возвращается первым запросом. Вы уверены, что он работает? –

+0

@Denis Я считаю, что он работает по назначению. Первый запрос возвращает столбцы в их порядковой позиции из того, что я испытал, поэтому, ограничив запрос 1, он возвращает только первую строку. Я могу ошибаться. Должен ли я указывать в первом запросе? – Joshua

+0

Первый запрос возвращает столбцы в том порядке, в котором они отображаются на диске. Вам нужно указать явное выражение 'order by' в SQL, иначе порядок, в который строки должны быть возвращены, не определен. –

ответ

0

Таким образом, просто использовать подзапрос:

$query = "SELECT * FROM INFORMATION_SCHEMA.$table ORDER BY (
    SELECT column_name FROM INFORMATION_SCHEMA.COLUMNS 
    WHERE TABLE_NAME = '$table' LIMIT 1) DESC 
    LIMIT $numRows"; 

$result = $mysqli->query($query); 
+0

Это упорядочивает по критерию, который является varchar (имя столбца). Не получится. –

+0

Вы пробовали? Я тестировал, прежде чем отвечать. –

2

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

SELECT * FROM $table ORDER BY 1 DESC ... 
Смежные вопросы