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

Форум MySQL

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

 

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

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

тема: Просьба помочь с запросом, у которого много ANDов
 
 автор: nickatin   (13.12.2009 в 15:24)   письмо автору
 
 

Есть таблица

id_book    id_metka
1          2
1         7
2         2
2         7
3         8
3         9
3         6
3         7
4         17
4         5




Нужно выбрать из нее id_book, у которого есть все полученные id_metka .
Хотел еще сделать чтобы скрипт выбирал id_book, даже если переданных id_metka больше, чем у него есть, но те что у него есть, все входят в область переданных.

id_metka передаются в массиве $metki[]

я делал так:

       $str = 'id_metka=';
       $n = count($metki);
       for($i=0;$i<($n-1);$i++)
       {
        $str=$str.$metki[$i].' AND id_metka=';
       }
       $str=$str.$metki[$n-1];


     $res_b = mysql_query("SELECT id_book FROM metki_book WHERE $str ");


Не знаю как нужно делать по всем правилам, поэтому просьба сильно не осуждать, а помочь конструктивно - советом или примеров. Буду очень благодарен, если кто-то сможет показать правильный рабочий запрос, который бы делал все что я задумал.

  Ответить  
 
 автор: Trianon   (13.12.2009 в 15:34)   письмо автору
 
   для: nickatin   (13.12.2009 в 15:24)
 

допустим, $metki = array(7, 8, 6);

1. Какой текст запроса Вы пытаетесь сформировать?

2. Какой результат Вы ожидаете от этого запроса получить?

  Ответить  
 
 автор: nickatin   (13.12.2009 в 15:59)   письмо автору
 
   для: Trianon   (13.12.2009 в 15:34)
 


SELECT id_book FROM metki_book WHERE  id_metka=7 AND id_metka=8 AND id_metka=6 ;

результат id_book =3

  Ответить  
 
 автор: Trianon   (13.12.2009 в 16:16)   письмо автору
 
   для: nickatin   (13.12.2009 в 15:59)
 

>SELECT id_book FROM metki_book WHERE id_metka=7 AND id_metka=8 AND id_metka=6 ;

И как, по Вашему, может быть так, что переменная равна семи , восьми и шести одновременно?

И ведь запрос можно проверить в phpMyAdmin ( или в другом клиенте) и убедиться, что он не вернет ни одной строки...

  Ответить  
 
 автор: nickatin   (13.12.2009 в 16:19)   письмо автору
 
   для: Trianon   (13.12.2009 в 16:16)
 

Без понятия, поэтому и спрашиваю. Знал бы, не выслушивал всю грязь, которая написана выше.
Можно написать через OR, но тогда выводит все id_book где есть хоть 1 id_metka...

  Ответить  
 
 автор: Trianon   (13.12.2009 в 16:37)   письмо автору
 
   для: nickatin   (13.12.2009 в 16:19)
 

Правильно.
А дальше результат можно сгруппировать по id_book и поставить условие, чтоб в группу попало не менее числа меток в списке. HAVING COUNT(*) >= 3

Кроме того, проще и быстрее будет применить IN(...) вместо цепочки OR


А грязь Вы спровоцировали сами. Вот этим вот id_metka=7 AND id_metka=8 AND id_metka=6

  Ответить  
 
 автор: nickatin   (13.12.2009 в 16:44)   письмо автору
 
   для: Trianon   (13.12.2009 в 16:37)
 

Спс, пошел разбираться.

Я первый раз написал на этом форуме и не в курсе, как здесь реагируют на вопросы, которые задают не ГУРУ программирования.

  Ответить  
 
 автор: Trianon   (13.12.2009 в 17:01)   письмо автору
 
   для: nickatin   (13.12.2009 в 16:44)
 

Что-то я не понимаю Вашего недовольства.
Ваш запрос, который полностью соответствует заявленному Вами в теме, и который Вы написали достаточно чисто, я мог бы поправить и отдать Вам за 15 секунд.
И он бы честно выдавал 0 строк. Вы такой реакции хотели чтоли?

А гур здесь нет. Вообще ни одной. Не боги горшки обжигают, знаете ли.

  Ответить  
 
 автор: nickatin   (13.12.2009 в 20:53)   письмо автору
 
   для: Trianon   (13.12.2009 в 17:01)
 

Модератор удалил посты, которые вызвали мое недовольство

  Ответить  
 
 автор: Valick   (13.12.2009 в 17:06)   письмо автору
 
   для: nickatin   (13.12.2009 в 16:44)
 

дело не в запросе, а в нарушении логики

Я первый раз написал на этом форуме
считайте всёвышесказанное боевым крещением ;)

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

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