|
|
|
| Я считываю из БД предположим 5 элементов. Среди этих 5-ти элементов есть элемент с нужным мне ID ... этот элемент я хочу вывести в начале списка. Как это сделать? Заранее спасибо. | |
|
|
|
|
|
|
|
для: Mootch
(18.08.2005 в 12:36)
| | Чем искомый ID отличается от других, он больше всех, меньше или просто известен его номер? и каким запросом производится выборка 5 элементов? | |
|
|
|
|
|
|
|
для: cheops
(18.08.2005 в 13:45)
| | >Чем искомый ID отличается от других, он больше всех, меньше
>или просто известен его номер? и каким запросом производится
>выборка 5 элементов?
Просто известен ID. Читаются все элементы БД запросом SELECT ... а разве еще каки-то другим можно?! | |
|
|
|
|
|
|
|
для: Mootch
(18.08.2005 в 15:25)
| | Я так понимаю, что ты хочешь сделать запрос типа
SELECT * FROM table_name
при этом строку с известным id вывести в списке на первом месте.
Т.е.
Например, имеется бд:
+---+-------+
| id | data |
+---+-------+
| 1 | data1 |
| 2 | data2 |
| 3 | data3 |
| 4 | data4 |
| 5 | data5 |
+---+-------+
Например, известен id=3 и неободимо вывести записи в следующем порядке:
+---+-------+
| id | data |
+---+-------+
| 3 | data3 |
| 1 | data1 |
| 2 | data2 |
| 4 | data4 |
| 5 | data5 |
+---+-------+
Если это так, то, похоже это невозможно сделать средствами тольно MySQL. Или условия другие? И, вообще, зачем это надо? С помощью PHP можно вывести записи в каком угодно порядке. | |
|
|
|
|
|
|
|
для: WebTech
(18.08.2005 в 19:39)
| | >похоже это невозможно сделать средствами тольно MySQL
Да на самом деле - легко:)
SELECT * FROM 'table' WHERE id =$id UNION SELECT * FROM 'table'
WHERE id !=$id LIMIT 5
|
где $id - тот id, который нужно вывести первым. | |
|
|
|
|
|
|
|
для: Loki
(18.08.2005 в 19:51)
| | Это что-то типа вложенного select? У меня такой запрос не работает :-( Это для какой версии годится? И что такое id !=$id? | |
|
|
|
|
|
|
|
для: WebTech
(18.08.2005 в 20:06)
| | Это объединение двух запросов в один. Если не ошибаюсь, введено в четвертой верcии mysql.
id !=$id - это мы выбираем оставшиеся записи так, чтобы среди них не попалась та, которую мы выбрали первой. | |
|
|
|
|
|
|
|
для: Loki
(19.08.2005 в 09:26)
| | Да, поспешил я с заявлением :-) Union введен с 4-й версии. В более ранних версиях можно использовать временные таблицы. Сделать запрос вроде этого:
CREATE TEMPORARY TABLE tmp SELECT * FROM table_name WHERE id=3;
INSERT INTO tmp SELECT * FROM table_name WHERE id!=3;
SELECT * FROM tmp; | |
|
|
|
|
|
|
|
для: WebTech
(19.08.2005 в 14:11)
| | Если верить Cheops'y, то у большинства хостеров временные таблицы запрещены, так как это реальная возможность кривым кодом повесить сервер. Так что либо юнион, либо в два запроса... можно еще сделать нормальную таблицу, которую использовать как временную, но тут никакого выигрыша не будет. | |
|
|
|
|
|
|
|
для: Loki
(18.08.2005 в 19:51)
| | огромное спасибо! Вы мне очень помогли! :) | |
|
|
|
|
|
|
|
для: Mootch
(18.08.2005 в 20:18)
| |
$param="select name as dname from m_d WHERE id=1 UNION select name as catname from m_category WHERE id=1";
$result = mysql_query($param,$link);
$name_row = mysql_fetch_array($result);
print $name_row[вname]."->".$name_row[catname]."<br>";
|
почему не работает catname ?
раззве нельзя получить результат без цикла While ?! | |
|
|
|
|
|
|
|
для: Mootch
(21.08.2005 в 15:46)
| | У вас нет этого столца в SELECT-запросе, необходимо либо добавить его либо использовать форум SELECT * FROM | |
|
|
|
|
|
|
|
для: cheops
(21.08.2005 в 17:34)
| | как нет?
а это ?
$param="select name as dname from m_d WHERE id=1 UNION select name as catname from m_category WHERE id=1";
|
| |
|
|
|
|
|
|
|
для: Mootch
(21.08.2005 в 18:58)
| | В первом SELECT-запросе имя должно быть тоже catname
<?php
$param="select name as catname from m_d WHERE id=1 UNION select name as catname from m_category WHERE id=1";
?>
|
Вообще говоря странно... а что вы хотите добиться этим запросом? Осуществить самообъединение? Так не получится UNION вернёт значение из первого и второго запроса и подставит друг под другом. Какова ваша исходная цель, что требуется сделать? | |
|
|
|