MARAZM, SELECT * FROM `table` WHERE (`pole2` =1 or `pole2` =3) and `pole1` = 1
так самое простое как по мне
(`pole2` =1 or `pole2` =3) это можно пыхом генерировать
Koenig, так мне нужно получить pole1. это поиск pole1 у которого в таблице pole2 имеет 1 и более значений или вобще нету такого
MARAZM, как то не логично
если нет ни одного совпадения, то все что равно 1 в поле1 будет верным
Koenig, ну смотри...
Например ищу pole1 у которого pole2 = a есть 2 варианта ответа не найдено и найдено 1 и более значений pole1
тот же смысл если для pole1 у pole2 несколько значений...не найдено вообще или найдено 1 и более
Грубо говоря это рассказ который записан в 2 и более категорий и мне нужно найти рассказ который относится к 1 и более категориями (зависит от выбора перед запросом)
Koenig, так а смысл мне указывать поле1 если я его ищу? или я не так тебя понял?
Грубо говоря мне нужно получить список id рассказов которые привязаны к 1 или 2 и более рассказам одновременно.
Ищу по категориям Анекдоты и Истории из цикла получаю что как рассказ 1 так и рассказ 2 привязан к категориям Анекдоты и истории значит их и выводить
http://johncms.com/forum/index ... 00332 реально работающий...осталось массив для pole2 запилить
MARAZM, значит я не так понял
# MARAZM (11.02.2016 / 00:39)
SELECT DISTINCT `pole1` FROM `table` WHERE `pole2` IN ('1' AND '3')
получил то что надо осталось выровнять условие IN() если 1 значение,если 2 и выше чтобы был нормальный запрос.. думаю справлюсь
Посоветую на счёт sql-синтаксиса:
1. Косые апострофы ` можешь не писать, без них код компактнее, а на работу не влияет
2. Числа (integer) пиши без апострофов '
3. Строки (string) - в апострофах '
Сравни эти две записи:
SELECT DISTINCT `pole1` FROM `table` WHERE `pole2` IN ('1' AND '3')
SELECT DISTINCT pole1 FROM table WHERE pole2 IN (1 AND 3)
Переменные в запрос можно писать так
//Если в переменной тип string
$sql = "SELECT name FROM table WHERE name = '$name'";
//Если в переменной тип integer
$sql = "SELECT id FROM table WHERE id = $id";
//По такому же принципу и массивы
//Если в массиве тип string
$sql = "SELECT name FROM table WHERE name = '{$datauser['name']}'";
//Если в массиве тип integer
$sql = "SELECT id FROM table WHERE id = {$datauser['id']}";
Ну и запрос писать как-то так
mysql_query($sql) or die(mysql_error());
Если использовать такую запись, то отпадает необходимость в использовании операторов
if
P.S.:
Эта инфа не конкретно только для тебя, может быть пригодится ещё кому-то
"SELECT * FROM tbl WHERE field1 = ".$int." AND field2 = '".$string."' LIMIT ".$start.", ".$len.";"
вообще то вот так.
а апострофы нужны для отделения строковых значений от предопределенных операторов
поле like в таблице tbl1
SELECT * FROM tbl1 WHERE `like` = '".$somevar."';
в данном случае апострофы необходимы
"SELECT * FROM tbl WHERE field1 = ".$int." AND field2 = '".$string."' LIMIT ".$start.", ".$len.";"
вообще то вот так.
это синоним этого
$sql = "SELECT * FROM tbl WHERE field1 = $int AND field2 = '$string' LIMIT $start, $len";
Ну а точка с запятой ";" в sql-запросе (именно в запросе, а не в конце php-выражения)
обязательно используется только в мониторе (в консоли), и служит разделителем инструкций. При работе с БД посредством php-функций точку с запятой юзать не обязательно.
SELECT * FROM tbl1 WHERE `like` = '".$somevar."';
в данном случае апострофы необходимы
//Если $somevar хранит строковые данные, то да
$sql = "SELECT * FROM tbl1 WHERE like = '$somevar'";
//Если $somevar хранит число, то нет
$sql = "SELECT * FROM tbl1 WHERE like = $somevar";