К примеру есть таблицы – admins и mails
admins
name | mail
Admin A | admin@aa.ru
Admin B | admin@bb.ru
Admin C | admin@cc.ru
mails
id | to
1 | admin@aa.ru, admin@cc.ru
2 | admin@bb.ru, admin@aa.ru
Как сделать запрос что бы выбрать все имена из таблицы admins всех у кого мэйл указан в таблице mails. Причем в таблице mails в поле to адреса перечислены через запятую, что собственно и является для меня проблемой (
То есть под id 1 с таблицы mails должно выводиться Admin A и Admin C и т.п.
Спустя 16 часов, 57 минут, 36 секунд (24.02.2012 - 07:17) McLotos написал(а):
Не совсем понял суть задачи.
$list - список всех to полей
дальше нужно получить количество строк в результате, затем по количеству строк построить цикл foreach (отделить строки друг от друга и каждую строку разложить через explode(",",$list))
как-то так? Т.е. в результате мы получим все email'ы которые имеются в переменной $list. Или я что-то не понял. Можете более детально описать суть проблемы?
$sql=mysql_query(SELECT * FROM `mails`);
while ($res=mysql_fetch_assoc($sql))
{
$list.=$res['to'];
}
$list - список всех to полей
дальше нужно получить количество строк в результате, затем по количеству строк построить цикл foreach (отделить строки друг от друга и каждую строку разложить через explode(",",$list))
как-то так? Т.е. в результате мы получим все email'ы которые имеются в переменной $list. Или я что-то не понял. Можете более детально описать суть проблемы?
Спустя 17 минут, 41 секунда (24.02.2012 - 07:34) Okulo написал(а):
выбрал данные и разделил через
$ex = explode (",", $row['to'] );
теперь данные в массиве.
McLotos - теперь задача сопоставить выбранным мйэлам данные из другой таблицы
допустим для id 1 соответствуют Admin A и Admin С
для id 2 - Admin A и Admin B
$ex = explode (",", $row['to'] );
теперь данные в массиве.
McLotos - теперь задача сопоставить выбранным мйэлам данные из другой таблицы
допустим для id 1 соответствуют Admin A и Admin С
для id 2 - Admin A и Admin B
Спустя 16 минут, 9 секунд (24.02.2012 - 07:51) sergeiss написал(а):
Цитата (Okulo @ 23.02.2012 - 15:19) |
Причем в таблице mails в поле to адреса перечислены через запятую, что собственно и является для меня проблемой |
Действительно, это и есть основная проблема

Почитай про нормализацию баз данных. Инфы много везде, например в Википедии: http://ru.wikipedia.org/wiki/Нормализация_баз_данных
Спустя 3 минуты, 37 секунд (24.02.2012 - 07:54) Okulo написал(а):
Цитата (sergeiss @ 24.02.2012 - 04:51) | ||
Действительно, это и есть основная проблема ![]() Почитай про нормализацию баз данных. Инфы много везде, например в Википедии: http://ru.wikipedia.org/wiki/Нормализация_баз_данных |

да уж...
теперь проблема отработки всех скриптов которые записывают в базу таким образом ..
да еще и данные как то перенести в новую таблицу...
по моему это сложнее, вам не кажется? ))
Спустя 6 минут, 56 секунд (24.02.2012 - 08:01) sergeiss написал(а):
Цитата (Okulo @ 24.02.2012 - 08:54) |
по моему это сложнее, вам не кажется? |
Нет

А переделать - это один раз всего, зато потом легче будет работать с этим проектом. Так что в сумме выиграешь. Плюс улучшишь свои же познания в этой области и в другой раз сделаешь сразу так, как более правильно. Опять же - тебе на пользу пойдет.
PS. Сделать другую таблицу и сделать скрипт для перезаписи данных в неё - это дело всего на 5-7 минут.
Спустя 38 минут, 23 секунды (24.02.2012 - 08:40) McLotos написал(а):
Сохраняете нужный email в переменную mail через цикл, дальше передаёте в запрос, и обрабатываете.
$sql=mysql_query("SELECT Name FROM admin WHERE `mail`='$mail'");
$sql=mysql_query("SELECT Name FROM admin WHERE `mail`='$mail'");
Спустя 1 час, 5 минут, 13 секунд (24.02.2012 - 09:45) Undertaker написал(а):
Хрена сколько головняка, надо было сразу вносить не mail a id и тогда посредством JOIN ну или хотя бы маилы были в разных колонках тогда через where. Попробуй так SELECT *
FROM admins
INNER JOIN mail ON admins.mail = mails.to возможно где то надо добавить % % (приблизительный поиск)
FROM admins
INNER JOIN mail ON admins.mail = mails.to возможно где то надо добавить % % (приблизительный поиск)
Спустя 6 минут, 40 секунд (24.02.2012 - 09:51) Okulo написал(а):
Цитата (McLotos @ 24.02.2012 - 05:40) |
Сохраняете нужный email в переменную mail через цикл, дальше передаёте в запрос, и обрабатываете. $sql=mysql_query("SELECT Name FROM admin WHERE `mail`='$mail'"); |
делал подобным образом
получалось так: при выборе ("SELECT Name FROM admin WHERE `mail`='$mail'"); получается что в принципе в массиве несколько имэйлов и поэтому один из них будет в $mail. соответственно выводятся куча записей где есть один из имэйлов переменной $mail
блин, сам запутался

Спустя 8 минут, 34 секунды (24.02.2012 - 10:00) Okulo написал(а):
Цитата (sergeiss @ 24.02.2012 - 05:01) | ||
Нет ![]() А переделать - это один раз всего, зато потом легче будет работать с этим проектом. Так что в сумме выиграешь. Плюс улучшишь свои же познания в этой области и в другой раз сделаешь сразу так, как более правильно. Опять же - тебе на пользу пойдет. PS. Сделать другую таблицу и сделать скрипт для перезаписи данных в неё - это дело всего на 5-7 минут. |
можно тогда вопрос:
есть форма;
к форме добавил уникальный идентификатор ;
форма содержит поля имя, фамилия и чек боксы выбора нескольких позиций email.
отправляются данные в БД в таблицу user - unik, name, lastname
и хочу записать в таблицу mails - unik , email
что соответствовать должно такому :
несколько юзеров и у каждого свой unik id, к ID привязано несколько адресов.
так вот, как одновременно с формы записать в эти две таблицы такие данные?
з.ы. сори за отступление от главной темы, но так я думаю смогу разделить адреса и выводить уж по отдельности. или я не туда мыслю? )
Спустя 7 минут, 5 секунд (24.02.2012 - 10:07) sergeiss написал(а):
Цитата (Okulo @ 24.02.2012 - 11:00) |
сори за отступление от главной темы, но так я думаю смогу разделить адреса и выводить уж по отдельности. или я не туда мыслю? ) |
Где ж тут отступление от темы? Это просто поворот темы в более правильную сторону

Цитата (Okulo @ 24.02.2012 - 11:00) |
так вот, как одновременно с формы записать в эти две таблицы такие данные? |
А в чем именно проблема? Данные у тебя есть. Создаёшь нужные запросы и пишешь в БД. Единственное примечание - уникальный ID надо "дать на откуп" таблице. Пусть она создает. Т.е. ты пишешь данные юзера в таблицу, получаешь ID записи и используешь этот ID для вставки данных с почтой. А также могут быть еще таблицы с телефонами, адресами и другими типами данных - организовать можно по такому же принципу, как только что обговорили.
Спустя 3 минуты, 50 секунд (24.02.2012 - 10:11) McLotos написал(а):
explode+цикл в помощь. Я показал направление, думайте
А вообще тяжеловато работать с абстрактными данными. Вы бы код показали или хотябы дамп таблиц
А вообще тяжеловато работать с абстрактными данными. Вы бы код показали или хотябы дамп таблиц
Спустя 18 минут, 30 секунд (24.02.2012 - 10:29) Okulo написал(а):
Цитата (sergeiss @ 24.02.2012 - 07:07) |
А в чем именно проблема? Данные у тебя есть. Создаёшь нужные запросы и пишешь в БД. Единственное примечание - уникальный ID надо "дать на откуп" таблице. Пусть она создает. Т.е. ты пишешь данные юзера в таблицу, получаешь ID записи и используешь этот ID для вставки данных с почтой. А также могут быть еще таблицы с телефонами, адресами и другими типами данных - организовать можно по такому же принципу, как только что обговорили. |
в том и проблема что я не совсем понимаю как это сделать
<?
$result = mysql_query("INSERT INTO `unik` ( `name`,`lastname`) VALUES ( '$name','$lastname')",$db);
$zp = mysql_query("select * from unik",$db2); // не пойму что выбрать :(
$result2 = mysql_query("INSERT INTO `mails` "); // тут я вообще не знаю что записывать :((
?>
если не трудно, приведете примерчик плиз
Спустя 3 дня, 9 минут, 16 секунд (27.02.2012 - 10:39) Okulo написал(а):
как записать данные в две таблицы?
Спустя 1 час, 19 минут, 41 секунда (27.02.2012 - 11:58) sergeiss написал(а):
Okulo - почитай в хэлпе про автоинкрементные поля и функцию из MySQL с именем LAST_INSERT_ID(). Ты можешь задать в таблице unik автоинкрементное поле. Затем, сразу же после вставки данных, считываешь его значение, которое используешь для вставки данных во вторую таблицу.
А еще лучше
используй, при возможности, PostgreSQL. Там это решается намного проще надежнее, чем в Мускуле.
А еще лучше

Спустя 1 день, 2 часа, 40 минут, 53 секунды (28.02.2012 - 14:39) Okulo написал(а):
поле айди с автоинкрементом я сделал ...
Затем, сразу же после вставки данных, считываешь его значение, которое используешь для вставки данных во вторую таблицу.
примерчик может есть хоть какой нибудь?
Затем, сразу же после вставки данных, считываешь его значение, которое используешь для вставки данных во вторую таблицу.
примерчик может есть хоть какой нибудь?

Спустя 5 минут, 2 секунды (28.02.2012 - 14:44) twin написал(а):
mysql_insert_id()
Спустя 3 минуты, 6 секунд (28.02.2012 - 14:47) Visman написал(а):
mysql_query('INSERT ...', link);
$new_id = mysql_insert_id(link);
Спустя 17 часов, 1 минута, 37 секунд (29.02.2012 - 07:49) Okulo написал(а):
со вставкой все понял.
теперь вся суть - есть две таблицы
admins имеет поля id|name
и
mails имеет поля name_id | email
далее есть форма, которая отправляет имя и несколько выбранных (чек-боксом) адресов.
получаем выбранные данные: имя и адрес1, адрес2 например. причем адреса приходят массивом.
делаю запрос
понятно, что таким образом я запишу только Array в поле email, или данные если был выбран тока один адрес.
вопрос: как правильно записать во вторую таблицу строки с массива?
теперь вся суть - есть две таблицы
admins имеет поля id|name
и
mails имеет поля name_id | email
далее есть форма, которая отправляет имя и несколько выбранных (чек-боксом) адресов.
получаем выбранные данные: имя и адрес1, адрес2 например. причем адреса приходят массивом.
делаю запрос
$resultat = mysql_query("INSERT INTO `admins` (`name`) VALUES ( '$name')",$db);
$last_id = mysql_insert_id();
mysql_query("INSERT INTO `mails` ( `name_id`, `email`) VALUES ( '$last_id', '$emai')", $db);
понятно, что таким образом я запишу только Array в поле email, или данные если был выбран тока один адрес.
вопрос: как правильно записать во вторую таблицу строки с массива?
Спустя 1 день, 6 часов, 8 минут, 22 секунды (1.03.2012 - 13:57) Okulo написал(а):
подскажите товарищи ))
Спустя 6 минут, 8 секунд (1.03.2012 - 14:03) Visman написал(а):
Okulo, если нужно записать массив в одно текстовое поле таблицы сериализуй его ф-ей serialize()
Спустя 2 минуты, 50 секунд (1.03.2012 - 14:06) Okulo написал(а):
Visman как раз таки надо записать данные в разные строки
Спустя 15 минут, 46 секунд (1.03.2012 - 14:22) Visman написал(а):
Именно в разные строки, а не поля?
Спустя 7 минут, 30 секунд (1.03.2012 - 14:30) Okulo написал(а):
Visman - именно в разные строки.
есть несколько адресов для одного айди в массиве (выше кстати описал)
и надо их вписать в разные строки полей id и mail
есть несколько адресов для одного айди в массиве (выше кстати описал)
и надо их вписать в разные строки полей id и mail
Спустя 5 минут, 22 секунды (1.03.2012 - 14:35) Visman написал(а):
Если нужно пары из массива вписать, то размещай блок
в цикл и в этом же цикле (перед блоком) бери $name и $emai из массива.
Если надо для одного $name вписать несколько $emai, то это
размещай перед циклом, а в цикле только второй запрос.
$resultat = mysql_query("INSERT INTO `admins` (`name`) VALUES ( '$name')",$db);
$last_id = mysql_insert_id();
mysql_query("INSERT INTO `mails` ( `name_id`, `email`) VALUES ( '$last_id', '$emai')", $db);
в цикл и в этом же цикле (перед блоком) бери $name и $emai из массива.
Если надо для одного $name вписать несколько $emai, то это
$resultat = mysql_query("INSERT INTO `admins` (`name`) VALUES ( '$name')",$db);
$last_id = mysql_insert_id();
размещай перед циклом, а в цикле только второй запрос.
Спустя 7 минут, 9 секунд (1.03.2012 - 14:42) Okulo написал(а):
а нет примера какого нибудь хотя бы?
Спустя 4 дня, 17 часов, 3 минуты, 49 секунд (6.03.2012 - 07:46) Okulo написал(а):
размещай перед циклом, а в цикле только второй запрос -
вернулся к данному вопросу, если честно я новичок в этом деле, поэтому не понимаю - перед каким циклом то? ((
можете набросать пример: как циклом записать данные в строки?
вернулся к данному вопросу, если честно я новичок в этом деле, поэтому не понимаю - перед каким циклом то? ((
можете набросать пример: как циклом записать данные в строки?
Спустя 4 часа, 37 минут, 15 секунд (6.03.2012 - 12:23) Visman написал(а):
Что-то я нить обсуждения потерял.
Еще раз в одном сообщении напиши в чем вопрос? Что из чего требуется получить?
Еще раз в одном сообщении напиши в чем вопрос? Что из чего требуется получить?
Спустя 55 минут, 9 секунд (6.03.2012 - 13:18) Okulo написал(а):
Цитата (Okulo @ 29.02.2012 - 04:49) |
теперь вся суть - есть две таблицы admins имеет поля id|name и mails имеет поля name_id | email далее есть форма, которая отправляет имя и несколько выбранных (чек-боксом) адресов. получаем выбранные данные: имя и адрес1, адрес2 например. причем адреса приходят массивом. делаю запрос $resultat = mysql_query("INSERT INTO `admins` (`name`) VALUES ( '$name')",$db); понятно, что таким образом я запишу только Array в поле email, или данные если был выбран тока один адрес. вопрос: как правильно записать во вторую таблицу строки с массива? |
тут я полностью описал задачу. - взять данные с одной таблицы и записать несколько строк с полученным айди во вторую таблицу (вкраце)
Спустя 7 минут, 16 секунд (6.03.2012 - 13:26) Visman написал(а):
Примерно так
Где $emails это массив вставляемых адресов.
$resultat = mysql_query("INSERT INTO `admins` (`name`) VALUES ('$name')",$db);
$last_id = mysql_insert_id($db);
foreach ($emails as $email) {
mysql_query("INSERT INTO `mails` (`name_id`, `email`) VALUES ($last_id, '$email')", $db);
}
Где $emails это массив вставляемых адресов.
Спустя 21 минута, 2 секунды (6.03.2012 - 13:47) Okulo написал(а):
Visman - спасибо большое! получилось.
+ вам в карму
+ вам в карму

Спустя 2 минуты, 3 секунды (6.03.2012 - 13:49) Visman написал(а):
А надо было в одну строку таблицы все адреса, чтоли?
Тогда один запрос
без всяких циклов.
Тогда один запрос
mysql_query("INSERT INTO `mails` (`name_id`, `email`) VALUES ($last_id, '".implode(',', $emails)."')", $db);
без всяких циклов.
Спустя 6 минут, 5 секунд (6.03.2012 - 13:55) Okulo написал(а):
нет. как раз таки нужно было в несколько. потому как не удобно потом обрабатывать полученные данные. хоты пробовал вначале разбивать их explode на выходе )
кстати, а может подскажите почему я сразу делаю к примеру отправку письма на адрес из БД:
то письмо не уходит.
а если так например :
то уходит
кстати, а может подскажите почему я сразу делаю к примеру отправку письма на адрес из БД:
$adm= mysql_query("SELECT * FROM nails WHERE `id`='".$_GET['s_id']."'",$db2);
$row= mysql_fetch_array($adm);
$to = $row['email'];
//тут тело и все такое
mail($to, $subject, $message, $headers);
то письмо не уходит.
а если так например :
$to ='admin@test.ru';
то уходит
Спустя 19 часов, 39 минут, 30 секунд (7.03.2012 - 09:34) Okulo написал(а):
не хотелось создавать отдельную тему, может тут кто подскажет -
как отправить письмо на несколько адресов из БД?
(это обратное тому что в теме ))
как отправить письмо на несколько адресов из БД?
(это обратное тому что в теме ))
Спустя 16 минут, 44 секунды (7.03.2012 - 09:51) Visman написал(а):
Цитата (Okulo @ 6.03.2012 - 18:55) |
то письмо не уходит. |
Выведи переменную на печать, чтобы увидеть куда ты пытаешься письмо отправить.
Цитата (Okulo @ 7.03.2012 - 14:34) |
как отправить письмо на несколько адресов из БД? |
В обратном порядке и действуй.
Делай запрос SELECT с нужным условием.
Потом обрабатывай ответ в цикле http://www.php.su/functions/?mysql-fetch-assoc
Спустя 9 минут, 9 секунд (7.03.2012 - 10:00) Okulo написал(а):
я просто не совсем понимаю -
mail($to, $subject, $message, $headers)
в такой конструкции можно ли перечислять адреса через запятую тут ? -
или лучше делать в bcc ?
$to ='admin@test.ru';
$subject = 'Тема письма';
$message = 'Текст письма';
$headers = 'MIME-Version: 1.0' . "\r\n";
$headers .= 'Content-type: text/html; charset=windows-1251' . "\r\n";
$headers .= 'To: user <user@example.com>' . "\r\n";
$headers .= 'From: server <server@example.com>' . "\r\n";
mail($to, $subject, $message, $headers)
в такой конструкции можно ли перечислять адреса через запятую тут ? -
$to ='admin@test.ru, admin2@test.ru';
или лучше делать в bcc ?
Спустя 4 минуты, 54 секунды (7.03.2012 - 10:05) Visman написал(а):
В цикле с использованием команды mysql_fetch_assoc на которую я дал ссылку где есть пример.
Можешь перевести результат из таблицы в строку вида 'admin@test.ru, admin2@test.ru'
Можешь каждый раз новое письмо в цикле на единичный адрес отправлять.
Можешь перевести результат из таблицы в строку вида 'admin@test.ru, admin2@test.ru'
Можешь каждый раз новое письмо в цикле на единичный адрес отправлять.
Спустя 1 час, 44 минуты, 10 секунд (7.03.2012 - 11:49) Okulo написал(а):
спасибо, понял.
решил каждый раз на новый адрес отправлять в цикле - так легче
решил каждый раз на новый адрес отправлять в цикле - так легче
