Отправляет email-рассылки с помощью сервиса Sendsay

RFpro.ru: Программирование на PHP

  Все выпуски  

RusFAQ.ru: Программирование на PHP


РАССЫЛКИ ПОРТАЛА RUSFAQ.RU

/ КОМПЬЮТЕРЫ И ПО / Языки программирования / PHP

Выпуск № 592
от 10.02.2007, 00:35

Администратор:Калашников О.А.
В рассылке:Подписчиков: 415, Экспертов: 58
В номере:Вопросов: 3, Ответов: 4


Вопрос № 74061: Есть таблица в MySQL table: id |id_1 |id_2 |id_3 |id_4 --------------------------------------- 1 |2 |1 |txt |563654 2 |2 |2 |txt |684596 3 |2 |5 |txt |563655 4 |2 |6 |txt |684536 5 |2 |3 |txt |566654 6 |2 |4 |txt ...
Вопрос № 74140: Здравствуйте! Будьте добры объясните, что такое модули! Как они работают? И вообще нужны ли они? ...
Вопрос № 74154: Доброго времени суток! Вопрос такого плана - есть стартовая страница index.php. Каркас страницы - таблицы. Центральная область - iframe. Мне надо, что бы в iframe отображался файл, подгружемый в зависимости от нажатой ссылки в меню.<b...

Вопрос № 74.061
Есть таблица в MySQL table:

id |id_1 |id_2 |id_3 |id_4
---------------------------------------
1 |2 |1 |txt |563654
2 |2 |2 |txt |684596
3 |2 |5 |txt |563655
4 |2 |6 |txt |684536
5 |2 |3 |txt |566654
6 |2 |4 |txt |604596

Мне нужно выбрать из таблицы 5 последних записей, но так, чтобы id_2 были все разные (id - auto_increment, id_4 - уникальное datetime).
Я посылаю такой запрос:
$query = "SELECT * FROM table GROUP BY id_2 ORDER by id DESC LIMIT 5";
Выбирает все правильно: строки 6,5,4,3,2, но когда добавляю новые записи:

7 |2 |7 |txt |566654
8 |2 |1 |txt |604596

то будут выбраны строки 7,6,5,4,3.

Я так полагаю, что группировка по id_2 группирует 8-ю запись с 1-й, и они не попадают с выбираемую 5-ку, т.к. id у 1-й строчки старее (меньше).

Так вот, как выбрать записи так, чтобы id_2 по-прежнему группировались, но выводилась бы запись из каждой группы с последним id, а не с первым?

То есть чтобы в последнем случае вывелись строки 8,7,6,5,4?
Отправлен: 04.02.2007, 15:27
Вопрос задал: Defalex (статус: Посетитель)
Всего ответов: 1
Мини-форум вопроса >>> (сообщений: 0)

Отвечает: lupus campestris
Здравствуйте, Defalex!
На примере:
1) mysql> select * from last;
+------+------+------+------+--------+
| id | id_1 | id_2 | id_3 | id_4 |
+------+------+------+------+--------+
| 1 | 2 | 1 | txt | 563654 |
| 2 | 2 | 2 | txt | 684596 |
| 3 | 2 | 5 | txt | 563655 |
| 4 | 2 | 6 | txt | 684536 |
| 5 | 2 | 3 | txt | 566654 |
| 6 | 2 | 4 | txt | 604596 |
| 7 | 2 | 7 | txt | 566654 |
| 8 | 2 | 1 | txt | 604596 |
| 9 | 2 | 4 | txt | 546372 |
+------+------+------+------+--------+
9 rows in set (0.00 sec)
Это аналог Вашей таблицы.
2) Делаем запрос:
mysql> select * from last inner join (select distinct id_2 as a from last order by id desc limit 5) as something on last.id_2=something.a where id=(select max(id) from last where last.id_2=something.a) order by id desc;
+------+------+------+------+--------+------+
| id | id_1 | id_2 | id_3 | id_4 | a |
+------+------+------+------+--------+------+
| 9 | 2 | 4 | txt | 546372 | 4 |
| 7 | 2 | 7 | txt | 566654 | 7 |
| 5 | 2 | 3 | txt | 566654 | 3 |
| 4 | 2 | 6 | txt | 684536 | 6 |
| 3 | 2 | 5 | txt | 563655 | 5 |
+------+------+------+------+--------+------+
5 rows in set (0.00 sec)
Получаем то, что нужно. Правда, добавляется лишнее поле...
Удачи!
---------
«С кем тяжело молчать, с тем не о чем говорить» (Метерлинк)
Ответ отправила: lupus campestris (статус: Профессор)
Россия, Москва
Тел.: +79060429689
Организация: http://www.orange-business.ru
WWW: http://lupus-campestris.blogspot.com/
ICQ: 193918889
----
Ответ отправлен: 07.02.2007, 11:54
Оценка за ответ: 5
Комментарий оценки:
Превосходно! Именно то, что нужно! Спасибо огромное! В PHP знаю только верхушки, и единственное, что нашел подходящее к этой задаче, это GROUP. Поначалу устраивало, а вот потом... А сейчас все решено!


Вопрос № 74.140
Здравствуйте!
Будьте добры объясните, что такое модули! Как они работают? И вообще нужны ли они?
Отправлен: 04.02.2007, 21:59
Вопрос задал: Keha (статус: Посетитель)
Всего ответов: 1
Мини-форум вопроса >>> (сообщений: 0)

Отвечает: Ерёмин Андрей
Здравствуйте, Keha!
По сути дела, модуль - это любая составляющая программы - отдельный файл, содержащий код на языке программирования или например php-скрипт. Как правило, создать на PHP большую систему (например, движок для сайта), написав один-единственный файл просто невозможно (даже если это и удастся сделать, то редактировать такой файл будет абсолютно неудобно). В связи с этим все процессы разделяют на отдельные составляющие и сохраняют по разным файлам - это и есть модули. Если в процессе работы скрипта ему требуется дополнительная информация, он обращается к другому модулю, в котором эта информация есть. Такие модули называются включаемыми. Это очень удобно - если что-то идёт не так, можно последовательным анализом каждого модуля найти ошибку. Более того, все данные не загружаются сразу - они загружаются только по мере необходимости. Это ускоряет работу. Таким образом получается целая система взаимодействий между отдельными модулями, а в конечном результате достигается поставленная цель . Желаю удачи!
---------
Нет правила без исключений. Правило без исключений - исключение из правил.
Ответ отправил: Ерёмин Андрей (статус: Профессор)
Россия, Тула
WWW: Программирование на Delphi. Всё для программиста. Файловый архив, статьи, помощь, советы, обмен опытом.
ICQ: 286867644
----
Ответ отправлен: 04.02.2007, 22:49
Оценка за ответ: 5


Вопрос № 74.154
Доброго времени суток!
Вопрос такого плана - есть стартовая страница index.php.
Каркас страницы - таблицы.
Центральная область - iframe.
Мне надо, что бы в iframe отображался файл, подгружемый в зависимости от нажатой ссылки в меню.

Рассматриваю такой вариант написания - при нажатии на любую из ссылок в области меню сайта, некой переменной будет передаваться какое-то значение, затем будет в этом же окне заново перегружаться эта страница, а значение, полученное при нажатии на ссылку в меню должно передаваться в iframe в виде генерируемой ссылки, и начинает подгружаться в iframe соответствующий файл по этой генерируемой ссылке. Возможно ли такое? Получается своего рода рекурсия. Конечно, я думал, что значение переменой можно сохранить в файл, а потом просто при загрузке стартовой страницы читать его, но что тогда делать с обнулением, или, того хуже - при заходе 2-ух и более человек одновременно получается чтение будет с одного файла. Отсюда идёт вывод - использовать кукис (не умею) или определять ай-пи каждого пользователя и создавать отдельный файл (а если их тысяча зайдёт одновременно?), кукис - более рационально. Как передать в iframe соответствующую ссылку - реализация простая, просто укажу пхп-файл в ссылке для iframe, который и будет генерировать эту ссылку, зависящую от нажатия меню (путём чтения переменной). Коротко говоря - является ли такой вариант нормальным, и если да - как лучше это реализовать? И если можно такой вариант - помогите с кодом, пожалуйста.
Заранее спасибо за Ваши подробные и толковые ответы.
Отправлен: 05.02.2007, 00:33
Вопрос задал: VeRTeX (статус: 1-ый класс)
Всего ответов: 2
Мини-форум вопроса >>> (сообщений: 0)

Отвечает: Ерёмин Андрей
Здравствуйте, VeRTeX!
Совершенно обычный способ, только даже iframe здесь не нужен. В навигации делаете ссылки вида index.php?page=downloads, а в том месте страницы, куда нужно вставить содержимое страницы, пишете так:
<?php
if ($page == "downloads") { include("downloads.html"); }
?>

В каталоге со скриптом соответственно должен находиться файл downloads.html. Если условие выполнится, то в текущее место будет включена эта страница. Таким же образом сделайте для всех страниц. А если файлы с содержанием страниц и значения параметра page называть одинаково, то всё будет работать одной строкой:
<?php
include($page.".html");
?>

Желаю удачи!
---------
Нет правила без исключений. Правило без исключений - исключение из правил.
Ответ отправил: Ерёмин Андрей (статус: Профессор)
Россия, Тула
WWW: Программирование на Delphi. Всё для программиста. Файловый архив, статьи, помощь, советы, обмен опытом.
ICQ: 286867644
----
Ответ отправлен: 05.02.2007, 09:14
Оценка за ответ: 5
Комментарий оценки:
Спасибо огромное!
Очень сложно писать то, чего не знаешь, и особенно, если за изучение оного ты взялся всего лишь три дня назад =)

Отвечает: PVS
Здравствуйте, VeRTeX!
Если само меню не изменяется в зависимости от выбраной ссылки, то Вам надо просто указать в iframe параметр name=имя_фрейма, а в ссылках писать target=имя_фрейма. Если меняется, то для реализации Вашего способа подправте код из предыдущего поста - вместо
include($page.".html");
поставте
echo '';
или
echo '';
Ответ отправил: PVS (статус: Специалист)
Ответ отправлен: 05.02.2007, 10:52


Отправить вопрос экспертам этой рассылки

Приложение (если необходимо):

* Код программы, выдержки из закона и т.п. дополнение к вопросу.
Эта информация будет отображена в аналогичном окне как есть.

Обратите внимание!
Вопрос будет отправлен всем экспертам данной рассылки!

Для того, чтобы отправить вопрос выбранным экспертам этой рассылки или
экспертам другой рассылки портала RusFAQ.ru, зайдите непосредственно на RusFAQ.ru.


Форма НЕ работает в почтовых программах The BAT! и MS Outlook (кроме версии 2003+)!
Чтобы отправить вопрос, откройте это письмо в браузере или зайдите на сайт RusFAQ.ru.


© 2001-2007, Портал RusFAQ.ru, Россия, Москва.
Идея, дизайн, программирование: Калашников О.А.
Email: adm@rusfaq.ru, Тел.: +7 (926) 535-23-31
ООО "Мастер-Эксперт Про", Москва, 2007
Авторские права | Реклама на портале
Версия системы: 4.44 beta от 26.01.2007
Яндекс Rambler's Top100

В избранное