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

  Все выпуски  

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


Информационный Канал Subscribe.Ru

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

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

Выпуск № 230
от 19.01.2006, 05:39

Администратор:Калашников О.А.
В рассылке:Подписчиков: 216, Экспертов: 38
В номере:Вопросов: 5, Ответов: 16


Вопрос № 33163: Здравствуйте. Спасибо за ответы на предыдущий вопрос. У меня вопрос по SQL: Есть две таблицы mail с колоноками: -mail -name -id_member -date и т.д. и таблица tmp_export с двумя колонками: -mail<br...
Вопрос № 33179: Есть SQL запрос: "SELECT name FROM tbl1 WHERE id='1'", который всегда выдает только одно значение (крайне редко возможно что результат будет пустой). Как правильнее и быстрее всего получить результат в переменную?...
Вопрос № 33180: Здравствуйте. Спасибо за ответы на предыдущий вопрос по sql. У меня еще вопрос по sql, более сложный: Есть две таблицы mail и link. mail содержит следующие столбцы: -mail -id_mail link содержит столбцы: -id_mail #...
Вопрос № 33194: Вопрос: В Php есть функция Mail. Можно ли через неё посылать (и соответственно как :)) HTML документы с прикрепленными картинками и прочей ерундой?...
Вопрос № 33198: Здраствуйте! Подскажите где можно скачать нормальный бесплатный каталог. Для использования в каталоге программ. Большое спасибо!...

Вопрос № 33.163
Здравствуйте.
Спасибо за ответы на предыдущий вопрос.
У меня вопрос по SQL:
Есть две таблицы
mail с колоноками:
-mail
-name
-id_member
-date
и т.д.

и таблица
tmp_export с двумя колонками:
-mail
-name.
===

Как максимально быстро из таблицы mail скопировать в таблицу tmp_export два столбца mail и name.
Условия выборки из mail: id_member = $id_member;
Таблица mail может содержать до 50 тыс. строк и больше!
С простой выборкой и последующим циклом долго.
Отправлен: 13.01.2006, 05:37
Вопрос задал: Оськин Дмитрий Владимирович (статус: Посетитель)
Всего ответов: 5
Мини-форум вопроса >>> (сообщений: 0)

Отвечает: Whisper
Здравствуйте, Оськин Дмитрий Владимирович!
Update tmp_export
UPDATE tmp_export ,mail SET tmp_export.mail=mail.mail, tmp_export.name=mail.name
WHERE tmp_export.id_member = $id_member;

тьфу ты, смысла в операции не вижу, а не все ли равно, что по очереди все перенести вот так

INSERT INTO tmp_export (mail, name)
SELECT mail, name from mail


---------
все тленно
Ответ отправила: Whisper (статус: 3-ий класс)
Отправлен: 13.01.2006, 09:58

Отвечает: XMF
Здравствуйте, Оськин Дмитрий Владимирович!
--
$a=mysql_query("select * from mail");
while($d=mysql_fetch_assoc($a))
mysql_query("insert into tmp_export values('".$d["mail"]."', '".$d["name"]."')");
--
Ответ отправил: XMF (статус: 3-ий класс)
Отправлен: 13.01.2006, 10:24

Отвечает: Diztex
Здравствуйте, Оськин Дмитрий Владимирович!
INSERT INTO tmp_export(mail, name) SELECT mail, name FROM mail WHERE id_number=$id_number
Ответ отправил: Diztex (статус: 1-ый класс)
Отправлен: 13.01.2006, 11:03

Отвечает: Дмитрий Иванов
Здравствуйте, Оськин Дмитрий Владимирович!

средствами MySQL:

insert into tmp_export (select mail,name from mail where id_member=$id_member)
---------
ставя оценку - подумай, может ты не все описал.
Ответ отправил: Дмитрий Иванов (статус: Студент)
Отправлен: 13.01.2006, 12:07

Отвечает: Stamm
Здравствуйте, Оськин Дмитрий Владимирович!
INSERT INTO tmp_export(mail, name) SELECT mail, name FROM mail WHERE id_number=$id_number
---------
В день - один, ну два подвига, не больше...
Ответ отправил: Stamm (статус: Студент)
Отправлен: 13.01.2006, 12:51


Вопрос № 33.179
Есть SQL запрос: "SELECT name FROM tbl1 WHERE id='1'", который всегда выдает только одно значение (крайне редко возможно что результат будет пустой).
Как правильнее и быстрее всего получить результат в переменную?

Приложение:

Отправлен: 13.01.2006, 12:47
Вопрос задал: Rusland (статус: Специалист)
Всего ответов: 3
Мини-форум вопроса >>> (сообщений: 5)

Отвечает: Дмитрий Иванов
Здравствуйте, Rusland!

$name=mysql_fetch_row($rslt);
$name=$name[0];
- будет на доли секунд быстрее, так как системой не создаеться ассоциативный массив, но это не значит, что он правильнее, правильность в этом случае зависит от твоего стиля программирования, и удобства понимания кода
---------
ставя оценку - подумай, может ты не все описал.
Ответ отправил: Дмитрий Иванов (статус: Студент)
Отправлен: 13.01.2006, 12:56
Оценка за ответ: 4
Комментарий оценки:
Спасибо

Отвечает: Stamm
Здравствуйте, Rusland!
Можно сделать на одну строчку меньше:
$rslt=mysql_query("SELECT name FROM tbl1 WHERE id='1'") or die("Invalid query: ".mysql_error());
$name=mysql_result($rslt,0,'name');
---------
В день - один, ну два подвига, не больше...
Ответ отправил: Stamm (статус: Студент)
Отправлен: 13.01.2006, 12:59
Оценка за ответ: 5
Комментарий оценки:
Спасибо

Отвечает: Ерёмин Андрей
Здравствуйте, Rusland!
Лично я бы не стал создавать массив значений и просто прочитал бы нужное значение:
$rslt=mysql_query("SELECT name FROM tbl1 WHERE id='1'");
$name=mysql_result($rslt,0);

Выгрузку в случае необработки запроса я бы тоже не стал делать - в $name просто окажется пустой результат и всё. И в mysql_result() не обязательно указывать имя поля - всё равно только name в запросе выделили.
---------
Работа - не волк, а произведение силы на расстояние!
Ответ отправил: Ерёмин Андрей (статус: Профессионал)
Отправлен: 13.01.2006, 14:26


Вопрос № 33.180
Здравствуйте.
Спасибо за ответы на предыдущий вопрос по sql.
У меня еще вопрос по sql, более сложный:
Есть две таблицы mail и link.
mail содержит следующие столбцы:
-mail
-id_mail

link содержит столбцы:
-id_mail #Связь с таблицей mail
-id_chanel # каналы, разделы подписки, может быть несколько
-confirm #Подтверждение на канал
-dateRegistered
===
Необходимо удалить из таблиц mail и link строки
если число строк в таблице link неподтвержденных (confirm==n) и истекшим сроком dateRegistered<$time == 0
Пример:
mail:
id_mail, mail
1, local@ru
2, local2@ru

link:
id_mail, id_chanel, confirm, dateRefistered
1, 2, n, 101202120#срок истек
1, 3, n, 101202125#срок истек
2, 2, y, 100000000#срок истек но подтвержден
2, 3, n, 100000000#срок истек
===
В итоге нужно удалить первую строку в mail и 1 и 2 в таблице link

Может можно одним запросом что то вроде:
DELETE FROM mail WHERE (SELECT COUNT(*) mail_chanel WHERE confirm = 'n' and dateActive < '10212221') = 0
Отправлен: 13.01.2006, 13:13
Вопрос задал: Оськин Дмитрий Владимирович (статус: Посетитель)
Всего ответов: 2
Мини-форум вопроса >>> (сообщений: 0)

Отвечает: Diztex
Здравствуйте, Оськин Дмитрий Владимирович!
DELETE mail,link FROM mail, link WHERE mail.id_mail=link.id_mail AND link.cofirm='n' AND link.dateActive < $time

Работать должно с версии 4.0
А вообще примеры подобных запросов имеются в документации http://dev.mysql.com
Ответ отправил: Diztex (статус: 1-ый класс)
Отправлен: 13.01.2006, 13:32

Отвечает: Stamm
Здравствуйте, Оськин Дмитрий Владимирович!
Одни запросом у меня не получилось......
DELETE FROM link WHERE confirm='n' AND dateActive<'10212221'
DELETE FROM mail WHERE NOT( id_mail IN (SELECT id_mail FROM link))
---------
В день - один, ну два подвига, не больше...
Ответ отправил: Stamm (статус: Студент)
Отправлен: 13.01.2006, 13:36


Вопрос № 33.194
Вопрос:
В Php есть функция Mail. Можно ли через неё посылать (и соответственно как :)) HTML документы с прикрепленными картинками и прочей ерундой?
Отправлен: 13.01.2006, 16:03
Вопрос задал: Golden Spider (статус: 4-ый класс)
Всего ответов: 4
Мини-форум вопроса >>> (сообщений: 0)

Отвечает: Straight
Здравствуйте, Golden Spider!
Разумеется, можно. Нужно всего лишь собрать тело письма в формате, предписанном RFC. Можете для этого воспользоваться классом из библиотеки PEAR.
Ответ отправил: Straight (статус: 3-ий класс)
Отправлен: 13.01.2006, 16:14

Отвечает: XMF
Здравствуйте, Golden Spider!
--
http://php.spb.ru/php/mail.html
Ответ отправил: XMF (статус: 3-ий класс)
Отправлен: 13.01.2006, 16:51
Оценка за ответ: 5
Комментарий оценки:
Кратко, но ястно!

Отвечает: Ерёмин Андрей
Здравствуйте, Golden Spider!
Последний (необязательный) параметр функции mail() - headers - заголовки, которые будут вставлены в письмо. Этим и нужно воспользоваться. Добавляете:
Content-Type: multipart/mixed;
boundary="----------BA12BAB3405C71D"

Параметр boundary - это разделитель фрагментов письма. А в тексте письма указываете текст, а дальше разделитель, служебные заголовки для следующей части и сам файл. Когда-то сам писал подобное, вот фрагменты кода:
$message = "";
$message .= "--MIME_BOUNDRY ";
$message .= "Content-Type: text/html; charset=windows-1251 ";
$message .= "Content-Transfer-Encoding: 8bit ";
$f = fopen("file.exe","r");
$message .= fread($f,filesize("file.exe"));
...
$message .= "--MIME_BOUNDRY ";
$message .= "Content-Type: application/octet-stream; name="background.gif" ";
$message .= "Content-disposition: attachment ";
$message .= "Content-Transfer-Encoding: base64 ";
$message .= "Content-ID: ";
$message .= " ";
$message .= "$str ";


Это основное - чтение файла и его перекодировка. Дальше, думаю, вы всё поймёте. Для примера, открываете любой письмо, где прикреплён файл и смотрите его заголовки. Потом добавляете их в письмо по аналогии.
Также на php.net есть подробная статья.
---------
Работа - не волк, а произведение силы на расстояние!
Ответ отправил: Ерёмин Андрей (статус: Профессионал)
Отправлен: 13.01.2006, 20:00
Оценка за ответ: 5
Комментарий оценки:
Спасибо

Отвечает: Lancelot
Здравствуйте, Golden Spider!
http://www.phpclub.ru/?m=app&s=72 Несколько скриптов, правда придётся переводить, но ничего. Рекомендую: скрипт SourceForge для ОЧЕНЬ крутых сайтов.
---------
Дуракам везёт? Не такие уж они и дураки. (Хенрик Ягодзинский)
Ответ отправил: Lancelot (статус: Студент)
Отправлен: 13.01.2006, 23:01


Вопрос № 33.198
Здраствуйте!
Подскажите где можно скачать нормальный бесплатный каталог.
Для использования в каталоге программ.

Большое спасибо!
Отправлен: 13.01.2006, 16:43
Вопрос задал: Александр Александрович (статус: 5-ый класс)
Всего ответов: 2
Мини-форум вопроса >>> (сообщений: 0)

Отвечает: Straight
Здравствуйте, Александр Александрович!
К сожалению, Вы не определили критерии "нормальности".
Но я посоветовал бы поискать на hostscripts.com
Ответ отправил: Straight (статус: 3-ий класс)
Отправлен: 13.01.2006, 17:03
Оценка за ответ: 4
Комментарий оценки:
Вы ведь наверняка видели каталоги программ....я имею в виду каталог с такой структурой.

Отвечает: Lancelot
Здравствуйте, Александр Александрович!
http://www.phpclub.ru/?m=app&s=72 Несколько скриптов, правда придётся переводить, но ничего. Рекомендую: скрипт SourceForge для ОЧЕНЬ крутых сайтов.
---------
Дуракам везёт? Не такие уж они и дураки. (Хенрик Ягодзинский)
Ответ отправил: Lancelot (статус: Студент)
Отправлен: 13.01.2006, 23:02
Оценка за ответ: 4
Комментарий оценки:
Спасибо за ссылку, но ничего не понятно. Многое не работает или не грузится...или я ничего не понял.


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

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

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

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

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


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


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

Subscribe.Ru
Поддержка подписчиков
Другие рассылки этой тематики
Другие рассылки этого автора
Подписан адрес:
Код этой рассылки: comp.soft.prog.phpplus
Архив рассылки
Отписаться Вебом Почтой
Вспомнить пароль

В избранное