|
|
|
| Есть таблица
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 ");
|
Не знаю как нужно делать по всем правилам, поэтому просьба сильно не осуждать, а помочь конструктивно - советом или примеров. Буду очень благодарен, если кто-то сможет показать правильный рабочий запрос, который бы делал все что я задумал. | |
|
|
|
|
|
|
|
для: nickatin
(13.12.2009 в 15:24)
| | допустим, $metki = array(7, 8, 6);
1. Какой текст запроса Вы пытаетесь сформировать?
2. Какой результат Вы ожидаете от этого запроса получить? | |
|
|
|
|
|
|
|
для: 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 | |
|
|
|
|
|
|
|
для: 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 ( или в другом клиенте) и убедиться, что он не вернет ни одной строки... | |
|
|
|
|
|
|
|
для: Trianon
(13.12.2009 в 16:16)
| | Без понятия, поэтому и спрашиваю. Знал бы, не выслушивал всю грязь, которая написана выше.
Можно написать через OR, но тогда выводит все id_book где есть хоть 1 id_metka... | |
|
|
|
|
|
|
|
для: nickatin
(13.12.2009 в 16:19)
| | Правильно.
А дальше результат можно сгруппировать по id_book и поставить условие, чтоб в группу попало не менее числа меток в списке. HAVING COUNT(*) >= 3
Кроме того, проще и быстрее будет применить IN(...) вместо цепочки OR
А грязь Вы спровоцировали сами. Вот этим вот id_metka=7 AND id_metka=8 AND id_metka=6 | |
|
|
|
|
|
|
|
для: Trianon
(13.12.2009 в 16:37)
| | Спс, пошел разбираться.
Я первый раз написал на этом форуме и не в курсе, как здесь реагируют на вопросы, которые задают не ГУРУ программирования. | |
|
|
|
|
|
|
|
для: nickatin
(13.12.2009 в 16:44)
| | Что-то я не понимаю Вашего недовольства.
Ваш запрос, который полностью соответствует заявленному Вами в теме, и который Вы написали достаточно чисто, я мог бы поправить и отдать Вам за 15 секунд.
И он бы честно выдавал 0 строк. Вы такой реакции хотели чтоли?
А гур здесь нет. Вообще ни одной. Не боги горшки обжигают, знаете ли. | |
|
|
|
|
|
|
|
для: Trianon
(13.12.2009 в 17:01)
| | Модератор удалил посты, которые вызвали мое недовольство | |
|
|
|
|
|
|
|
для: nickatin
(13.12.2009 в 16:44)
| | дело не в запросе, а в нарушении логики
Я первый раз написал на этом форуме
считайте всёвышесказанное боевым крещением ;) | |
|
|
|