Я новичок в mysql, но у меня есть база данных с некоторыми данными, упорядоченная по имени:
<option value="4"> George </option>
<option value="55"> John </option>
<option value="13"> Paul </option>
<option value="24"> Ringo </option>
Я хочу поставить это на выбор, например:
while($row = mysql_fetch_array($result) ){
echo "<option value='".$row['id']."'>".$row['name']."</option>";
}
Но я хочу сказать, что выбрать, чтобы поставить только один вариант в верхней части, самый популярный выбор, например:
<option value="55"> John (most popular)</option>
<option value="4"> George </option>
<option value="13"> Paul </option>
<option value="24"> Ringo </option>
Как я могу исключить только одну строку? Я должен использовать mysql_fetch_array?
Лучше сделать это на SQL? Или используя цикл?
Спасибо!
Это должно работать:
(SELECT id, name||' (most popular)' AS name FROM table ORDER BY id DESC LIMIT 1)
UNION DISTINCT
(SELECT id, name FROM table)
Запустите запрос, а затем переведите его в HTML. Другим подходом может быть использование JavaScript для перемещения элемента с наивысшим идентификатором вверху после визуализации HTML.
ваш лучший вариант - сделать это в SQL. Мы должны увидеть вашу схему и ваш текущий SQL, чтобы помочь правильно. Стоит отметить, что вы можете заказать два столбца, например
SELECT * FROM foo ORDER BY col1,col2
Если вам нужно использовать буквенный порядок, вам, возможно, придется разбить его на два запроса, сначала запросить только для получения самого элемента, а второй - перечислить остальные.
Я уверен, что это выполняется в линейном времени, а сортировка выполняется не быстрее (если не медленнее).
Как насчет популярности order by
? Это не совсем то, что вы просили, но было бы намного проще, и, может быть, это более логично?