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

Форум MySQL

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

 

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

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

тема: Проверка соответствия и удаление элемента массива.
 
 автор: lElectroHardl   (24.07.2010 в 22:32)   письмо автору
1.4 Кб
 
 

Есть таблица с идентификаторами рецептов (rec_id) и идентификаторами ингредиентов (ings_id).
Есть запрос:
$rec_id1 = mysql_query ("SELECT distinct rec_id FROM rec_ings WHERE ings_id IN (2,4,6,8)",$db);
$rec_id = mysql_fetch_array ($rec_id1);

Теперь, каким-то чудесным образом мне нужно отфильтровать $rec_id['rec_id'].
Примерно по такой системе:

Мне нужно взять каждый из возвращенных идентификаторов, которые попали в $rec_id['rec_id'] (т.е. 1,2,3,4) и проверить каждый этот идентификатор с значениям поля ings_id['ings_id'], при каждом значении $rec_id['rec_id'].
Т.е. примерно так:

$ings_id1 = mysql_query ("SELECT distinct ings_id FROM rec_ings WHERE rec_id IN ($rec_id['rec_id'])",$db);
$ings_id = mysql_fetch_array ($ings_id1);
do
{
if ( $ings_id['ings_id'] == "Любым значениям, кроме 2,4,6,8" )
{
"Удалить тот элемент из $rec_id['rec_id']"
}
}
while ( $ings_id = mysql_fetch_array ($ings_id1) );

Т.е. сначала должно проверяться $rec_id['ings_id'] == 1. При котором $ings_id['ings_id'] == 2,4,6,8. Проверяется, равны ли эти числа (2,4,6,8) числам, которые находятся в 1-м запросе (2,4,6,8 == 2,4,6,8). Да, равно, идем дальше.
Потом проверяется 2-е значение $rec_id['ings_id']. $rec_id['ings_id'] == 2. При котором $ings_id['ings_id'] == 2,4,6,10. Проверяется, равны ли числа (2,4,6,10), числам "2,4,6,8". Нет. Т.к. у нас 10 !== 8. Удаляем из массива $rec_id['ings_id'] число 2.
(и еще: (8,4,2,6 == 2,8,6,4), а (10,4,2,6 !== 2,8,6,4) и (8,5,2,6 == 2,8,6,4) )

В итоге, смотря на таблицу, можно увидеть, что должны остаться только $rec_id['rec_id'] == 1,4.

Либо эту же фильтрацию можно как-то сделать в 1-м запросе, без последующих циклов.
Заранее ОГРОМНЕЙШЕЕ спасибо!

  Ответить  
 
 автор: Valick   (24.07.2010 в 23:19)   письмо автору
 
   для: lElectroHardl   (24.07.2010 в 22:32)
 

1) избавляйтесь от do while используйте только while
2) вопрос не понятен, начинайте с дампа таблиц и желательно с описанием полей.
3) расскажите что имеем на входе и что хотите получить на выходе словами и сущностями таблицы
когда я сочинял дерево рецепта для Runes of Magic то использовал запросы в цикле, реализовать задуманное без цикла ума не хватило. один и тот же ингредиент там мог использоваться на разных уровнях вложенных рецептов.

  Ответить  
 
 автор: Trianon   (24.07.2010 в 23:28)   письмо автору
 
   для: Valick   (24.07.2010 в 23:19)
 

Надо отдать должное, дамп в аттаче можно глянуть сразу.

  Ответить  
 
 автор: Valick   (24.07.2010 в 23:36)   письмо автору
 
   для: Trianon   (24.07.2010 в 23:28)
 

:) прошляпил значит)) но у меня уважительная причина... я змея воздушного запускал....

  Ответить  
 
 автор: Trianon   (25.07.2010 в 00:14)   письмо автору
 
   для: Valick   (24.07.2010 в 23:36)
 

хорошо хоть, не зеленого...

  Ответить  
 
 автор: oliss   (25.07.2010 в 21:45)   письмо автору
 
   для: Trianon   (25.07.2010 в 00:14)
 

>... я змея воздушного запускал....
Раньше говорили : пыхнул косячка ;)))

  Ответить  
 
 автор: lElectroHardl   (25.07.2010 в 17:15)   письмо автору
 
   для: lElectroHardl   (24.07.2010 в 22:32)
 

Ппц! Все оказалось так легко! Вот исходник:
$rec_id1 = mysql_query ("SELECT distinct rec_id FROM rec_ings WHERE ings_id IN (2,4,6,8) and rec_id NOT IN (SELECT rec_id FROM rec_ings WHERE ings_id IN (10,12))",$db);
$rec_id = mysql_fetch_array ($rec_id1);

  Ответить  
Rambler's Top100
вверх

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