Различные вопросы по PHP и MySQL

244K
.
(\/)____o_O____(\/)
MARAZM, SELECT * FROM `table` WHERE (`pole2` =1 or `pole2` =3) and `pole1` = 1
так самое простое как по мне
(`pole2` =1 or `pole2` =3) это можно пыхом генерировать
.
КИДАЛА!!! Дел не иметь!
Koenig, так мне нужно получить pole1. это поиск pole1 у которого в таблице pole2 имеет 1 и более значений или вобще нету такого
.
(\/)____o_O____(\/)
MARAZM, как то не логично
если нет ни одного совпадения, то все что равно 1 в поле1 будет верным
.
MARAZM
КИДАЛА!!! Дел не иметь!
Koenig, ну смотри...

Например ищу pole1 у которого pole2 = a есть 2 варианта ответа не найдено и найдено 1 и более значений pole1

тот же смысл если для pole1 у pole2 несколько значений...не найдено вообще или найдено 1 и более

Грубо говоря это рассказ который записан в 2 и более категорий и мне нужно найти рассказ который относится к 1 и более категориями (зависит от выбора перед запросом)
.
(\/)____o_O____(\/)
MARAZM, http://johncms.com/forum/index ... 00338 это вроде норм отработает
.
MARAZM
КИДАЛА!!! Дел не иметь!
Koenig, так а смысл мне указывать поле1 если я его ищу? или я не так тебя понял?

Грубо говоря мне нужно получить список id рассказов которые привязаны к 1 или 2 и более рассказам одновременно.

Ищу по категориям Анекдоты и Истории из цикла получаю что как рассказ 1 так и рассказ 2 привязан к категориям Анекдоты и истории значит их и выводить

http://johncms.com/forum/index ... 00332 реально работающий...осталось массив для pole2 запилить
.
(\/)____o_O____(\/)
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";
Всего: 7969