Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
Программирование. Ступени успешной карьеры. Авторы: Кузнецов М.В., Симдянов И.В. PHP 5/6. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. Социальная инженерия и социальные хакеры. Авторы: Кузнецов М.В., Симдянов И.В. PHP. Практика создания Web-сайтов (второе издание). Авторы: Кузнецов М.В., Симдянов И.В. C++. Мастер-класс в задачах и примерах. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум MySQL

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: вывести элемент с определённым id первым
 
 автор: Mootch   (18.08.2005 в 12:36)   письмо автору
 
 

Я считываю из БД предположим 5 элементов. Среди этих 5-ти элементов есть элемент с нужным мне ID ... этот элемент я хочу вывести в начале списка. Как это сделать? Заранее спасибо.

   
 
 автор: cheops   (18.08.2005 в 13:45)   письмо автору
 
   для: Mootch   (18.08.2005 в 12:36)
 

Чем искомый ID отличается от других, он больше всех, меньше или просто известен его номер? и каким запросом производится выборка 5 элементов?

   
 
 автор: Mootch   (18.08.2005 в 15:25)   письмо автору
 
   для: cheops   (18.08.2005 в 13:45)
 

>Чем искомый ID отличается от других, он больше всех, меньше
>или просто известен его номер? и каким запросом производится
>выборка 5 элементов?

Просто известен ID. Читаются все элементы БД запросом SELECT ... а разве еще каки-то другим можно?!

   
 
 автор: WebTech   (18.08.2005 в 19:39)   письмо автору
 
   для: 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 можно вывести записи в каком угодно порядке.

   
 
 автор: Loki   (18.08.2005 в 19:51)   письмо автору
 
   для: WebTech   (18.08.2005 в 19:39)
 

>похоже это невозможно сделать средствами тольно MySQL
Да на самом деле - легко:)

SELECT * FROM 'table' WHERE id =$id UNION SELECT * FROM 'table' 
WHERE id !=$id LIMIT 5 

где $id - тот id, который нужно вывести первым.

   
 
 автор: WebTech   (18.08.2005 в 20:06)   письмо автору
 
   для: Loki   (18.08.2005 в 19:51)
 

Это что-то типа вложенного select? У меня такой запрос не работает :-( Это для какой версии годится? И что такое id !=$id?

   
 
 автор: Loki   (19.08.2005 в 09:26)   письмо автору
 
   для: WebTech   (18.08.2005 в 20:06)
 

Это объединение двух запросов в один. Если не ошибаюсь, введено в четвертой верcии mysql.
id !=$id - это мы выбираем оставшиеся записи так, чтобы среди них не попалась та, которую мы выбрали первой.

   
 
 автор: WebTech   (19.08.2005 в 14:11)   письмо автору
 
   для: 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;

   
 
 автор: Loki   (19.08.2005 в 15:28)   письмо автору
 
   для: WebTech   (19.08.2005 в 14:11)
 

Если верить Cheops'y, то у большинства хостеров временные таблицы запрещены, так как это реальная возможность кривым кодом повесить сервер. Так что либо юнион, либо в два запроса... можно еще сделать нормальную таблицу, которую использовать как временную, но тут никакого выигрыша не будет.

   
 
 автор: Mootch   (18.08.2005 в 20:18)   письмо автору
 
   для: Loki   (18.08.2005 в 19:51)
 

огромное спасибо! Вы мне очень помогли! :)

   
 
 автор: Mootch   (21.08.2005 в 15:46)   письмо автору
 
   для: 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 ?!

   
 
 автор: cheops   (21.08.2005 в 17:34)   письмо автору
 
   для: Mootch   (21.08.2005 в 15:46)
 

У вас нет этого столца в SELECT-запросе, необходимо либо добавить его либо использовать форум SELECT * FROM

   
 
 автор: Mootch   (21.08.2005 в 18:58)   письмо автору
 
   для: 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";

   
 
 автор: cheops   (22.08.2005 в 02:02)   письмо автору
 
   для: 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 вернёт значение из первого и второго запроса и подставит друг под другом. Какова ваша исходная цель, что требуется сделать?

   
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования