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

Форум MySQL

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

 

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

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

тема: UNION-запрос
 
 автор: dima_s_d_s   (23.02.2007 в 12:15)   письмо автору
 
 

Я пробую так


<?
sql_query
("select ids from zapis order by id DESC limit 0,10 UNION select cer, cer_t, cer_a FROM chel ORDER BY cer=ids"$dbi);
?>

но не работает, может я не так делаю?

   
 
 автор: cheops   (23.02.2007 в 12:19)   письмо автору
 
   для: dima_s_d_s   (23.02.2007 в 12:15)
 

Не выходит что?

PS Результирующая таблица формируется по первому SELECT-запросу, поэтому второй запрос лучше поставить на первое место. Желательно, чтобы количество полей совпадало - если не совпадает, не достающие поля следует дополнить скалярными значениями.

   
 
 автор: dima_s_d_s   (23.02.2007 в 12:20)   письмо автору
 
   для: cheops   (23.02.2007 в 12:19)
 

А пример можете привести?

   
 
 автор: cheops   (23.02.2007 в 14:37)   письмо автору
 
   для: dima_s_d_s   (23.02.2007 в 12:20)
 

Как-то так
<?php
$query 
" select cer, cer_t, cer_a FROM chel UNION select ids, 0, 0 from zapis ORDER BY cer";
sql_query($query$dbi); 
?>

   
 
 автор: dima_s_d_s   (23.02.2007 в 15:10)   письмо автору
 
   для: cheops   (23.02.2007 в 14:37)
 

а как мне при этом сделать выборку, вот так не работает:



<?php 
$query 
" select cer, cer_t, cer_a FROM chel UNION select ids, 0, 0 from zapis where ids=cer ORDER BY cer"
sql_query($query$dbi);  
?> 

   
 
 автор: cheops   (23.02.2007 в 15:55)   письмо автору
 
   для: dima_s_d_s   (23.02.2007 в 15:10)
 

Поле cer во втором запросе из первого? Так не получится, следует прибегать либо к объединеню, либо к вложенному запросу. Объясните на словах, что в таблицах и что сделать хотите?

   
 
 автор: dima_s_d_s   (23.02.2007 в 16:04)   письмо автору
 
   для: cheops   (23.02.2007 в 15:55)
 

Первая таблица со статьями (новостями)
а вторая таблица с комментариями к статьям (новостям)
Нужно вывести заголовки статей (новостей) исходя из последних комментариев. (10 последних комментов)

Так вот, я могу это сделать с помощью двух запросов, а вот как это сделать одним запросом незнаю!

   
 
 автор: cheops   (23.02.2007 в 19:15)   письмо автору
 
   для: dima_s_d_s   (23.02.2007 в 16:04)
 

Какая из таблиц chel и zapis является первой, а какая второй? Как определяется что комментарий последний? Имеется поле с датой, если да, то как оно называется и в какой таблице расположено?

   
 
 автор: dima_s_d_s   (23.02.2007 в 19:26)   письмо автору
 
   для: cheops   (23.02.2007 в 19:15)
 

Вот например (что-бы не путаться я переименовал)

Таблица news_comment - коменты
- news_comment_id - id коммента
- news_comment_news_id - id новости
- news_comment_date - дата типа (2006-11-10 22:25:48)


Таблица news - новости
- news_id - id новости
- news_title - заголовок новости

   
 
 автор: cheops   (23.02.2007 в 19:50)   письмо автору
 
   для: dima_s_d_s   (23.02.2007 в 19:26)
 

Тогда можно поступить следующим образом
SELECT news.news_title AS news_title
FROM news, news_comment
WHERE news.news_id = news_comment.news_comment_news_id
GROUP BY news.news_title
ORDER BY news_comment.news_comment_date DESC
LIMIT 10

   
 
 автор: dima_s_d_s   (23.02.2007 в 20:16)   письмо автору
 
   для: cheops   (23.02.2007 в 19:50)
 

Сенкс, всё работает, вот только я не совсем понял код. Например если я захочу ещё вывести id новости, что я должен сделать?

   
 
 автор: cheops   (23.02.2007 в 22:37)   письмо автору
 
   для: dima_s_d_s   (23.02.2007 в 20:16)
 

Добавляйте расширенные имена столбцов (имя_базы_данных.имя_столбца) через запятую (для удобства можно назначить псевдоним при помощи оператора AS) после ключевого слова SELECT.
SELECT news.news_title AS news_title,
news.news_id AS news_id
FROM news, news_comment 
WHERE news.news_id = news_comment.news_comment_news_id 
GROUP BY news.news_title 
ORDER BY news_comment.news_comment_date DESC 
LIMIT 10

   
 
 автор: dima_s_d_s   (23.02.2007 в 23:17)   письмо автору
 
   для: cheops   (23.02.2007 в 22:37)
 

Спасибо за помощь!

   
Rambler's Top100
вверх

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