Не нашел в интернете ответа, подскажите пожалуйста - Как сделать запрос выборки из БД по нескольким столбцам отсекая лишние данные Есть БД с пользователями такая ID ИМЯ ГОД РОЖДЕНИЯ ГОРОД id FIRST_NAME BIRTHDAY_YEAR NAS_PUNKT 1 Михаил 1999 Москва 2 Иван 1984 Воронеж - то есть если в поиске выбрали Михаил+Москва (сейчас выводиться правильно), а если выбрали Михаил+Воронеж - показывало что такого результата нет! то есть что в БД такая комбинация не найдена (т.е. нет пользователя с данными и имя-Михаил и город-Воронеж), а сейчас показывает и Михаила и Ивана т.к. при поиске у одного совпадает имя а у второго город, как это отфильтровать??? [ так вот делаю запрос к БД: Код (PHP): SELECT * FROM USERS WHERE FIRST_NAME = '$first_name' OR NAS_PUNKT = '$city' OR BIRTHDAY_YEAR = '$birthday' код ПХП: Код (PHP): <?php require '../database_connection.php'; if (!mysql_connect(DATABASE_HOST, DATABASE_USERNAME, DATABASE_PASSWORD)) { exit('Cannot connect to server'); } if (!mysql_select_db(DATABASE_NAME)) { exit('Cannot select database'); } { $first_name = trim($_REQUEST['first_name']); $nas_punct = trim($_REQUEST['nas_punct']); $birthday = trim($_REQUEST['birthday']); } /* Выполнение SQL запроса */ $query = " SELECT * FROM USERS WHERE FIRST_NAME = '$first_name' OR NAS_PUNKT = '$nas_punct' OR BIRTHDAY_YEAR = '$birthday' "; $result = mysql_query($query) or die("Запрос ошибочный"); if (!$result) { echo "Could not successfully run query ($query) from DB: " . mysql_error(); exit; } if (mysql_num_rows($result) == 0) { echo "Результаты по заданным параметрам не найдены!"; exit; } while ($row = mysql_fetch_assoc($result)) { printf(" <p>ФИО: " .$row['LAST_NAME'] . " " .$row['FIRST_NAME'] . " " .$row['MIDDLE_NAME'] . " </p> <ul> <li>Город: " .$row['NAS_PUNKT'] ." </li> <li>Год рождения: " .$row['BIRTHDAY_YEAR'] ." </li> </ul> </div> " ); } ?> как сделать?
Re: Как сделать запрос выборки из БД по нескольким столбцам это уже пробовал - тогда если задаем поиск не по всем полям а только по 1 или 2 то выдает что результаты не найдены((((((((
Re: Как сделать запрос выборки из БД по нескольким столбцам какой ужас. наверное нужно делать составной запрос чтоб отсеивать поля по которым не идет поиск?
Re: Как сделать запрос выборки из БД по нескольким столбцам я так понял что да, но прочитав про составные запросы - там все равно какой-то запрос главный а все остальные последующие т.е. сначала выбираем город например - Москва, если выбрали Москва вылезут все пользователи из Москвы , потом если ввели Москва+год рождения 1999 то вылезут все из Москвы 1999г.р., а мне надо как в ВК, чтоб даже если я не выбрал город, а выбрал только год рождения 1999 то все равно вылазили б только все с годом рождения 1999
Re: Как сделать запрос выборки из БД по нескольким столбцам нет, составной запрос не так делается. пишешь в переменную "заголовок" запроса, потом проверяешь ифами какие у тебя фильтры есть, накидываешь их к основному запросу с логикой и. и выполняешь полученный текста запроса. Добавлено спустя 6 минут 58 секунд: Re: Как сделать запрос выборки из БД по нескольким столбцам отсе и да, совершенно не обязательно создавать 100500 тем на каждый пук своего сознания. все эти вопросы можно было порешать в рамках уже созданного треда. потому что это лишь развитие треда. ты продолжаешь тупить поэтому тот тред развивается и не стремится к закрытия. не надо создавать еще одну тему в которой ты дальше будешь тупить. тупи в одной теме.
Re: Как сделать запрос выборки из БД по нескольким столбцам а где конкретно "Заголовок запроса"?и как проверить фильтрами?
так? Код (PHP): { $first_name = trim($_REQUEST['first_name']); $nas_punct = trim($_REQUEST['nas_punct']); $birthday = trim($_REQUEST['birthday']); $новая переменная = 'SELECT * FROM USERS WHERE FIRST_NAME = '$first_name' AND NAS_PUNKT = '$nas_punct' AND BIRTHDAY_YEAR = '$birthday' "; } * Выполнение SQL запроса */ $query = "SELECT * FROM USERS WHERE FIRST_NAME= '$f' AND NAS_PUNKT = '$n' "; $result = mysql_query($query) or die("Запрос ошибочный"); if ($first_name == 0 ) { ('какое-то действие'); } if (isset($first_name )) { $first_name = $f; } if (isset($nas_punct )) { if ($nas_punct == 0 ) { ('какое-то действие'); } if (isset($nas_punct )) { $nas_punct = $n; } я хоть что-то правильно понял из тобой написанного? только к чему новая переменная с запросом внутри?
или может примерно так??????? (нашел наконец на одном форуме подогнал под свою ситуацию) Код (PHP): <?php require '../php_primer/database_connection.php'; if (!mysql_connect(DATABASE_HOST, DATABASE_USERNAME, DATABASE_PASSWORD)) { exit('Cannot connect to server'); } if (!mysql_select_db(DATABASE_NAME)) { exit('Cannot select database'); } { $first_name = trim($_REQUEST['first_name']); $nas_punct = trim($_REQUEST['nas_punct']); $birthday = trim($_REQUEST['birthday']); } /* Выполнение SQL запроса */ $data = array(); if(!empty($_POST['first_name'])) $data[] = "`first_name`='".mysql_real_escape_string($_POST['first_name'])."'"; if(!empty($_POST['nas_punct'])) $data[] = "`nas_punct`='".mysql_real_escape_string($_POST['nas_punct'])."'"; if(!empty($_POST['birthday'])) $data[] = "`birthday`='".mysql_real_escape_string($_POST['birthday'])."'"; if(count($data) > 0) { mysql_query( "SELECT `FIRST_NAME`, `NAS_PUNKT`, `BIRTHDAY_YEAR` FROM USERS WHERE ".implode(' AND ', $data) ); } $result = mysql_query($data) or die("Запрос ошибочный"); if (!$result) { echo "Could not successfully run query ($data) from DB: " . mysql_error(); exit; } if (mysql_num_rows($result) == 0) { echo "Результаты по заданным параметрам не найдены!"; exit; } while ($row = mysql_fetch_assoc($result)) { printf(" <p>ФИО: " .$row['LAST_NAME'] . " " .$row['FIRST_NAME'] . " " .$row['MIDDLE_NAME'] . " </p> <ul> <li>Город: " .$row['NAS_PUNKT'] ." </li> <li>Год рождения: " .$row['BIRTHDAY_YEAR'] ." </li> <li>Дом.телефон: " .$row['PHONE_1'] ." </li> <li>E-mail: " .$row['EMAIL'] ." </li> </ul>" ); } ?> но что-то опять не так(((((((((((((((( в чем ошибка??? ну это хоть ближе к правде?
Re: Как сделать запрос выборки из БД по нескольким столбцам Пока ты не начнешь понимать что ты делаешь, ты не начнешь понимать, почему оно не работает.
Re: Как сделать запрос выборки из БД по нескольким столбцам ага, давай ещё раз, пока не поймёшь. То, что ты у кого-то взял было ближе к правде у него. А то, что ты натянул на свою структуру БД может быть ближе, а может и нет. И нужен кто-то, кто в это дело серьёзно вчитается и вдумается. Если это не хочешь делать ты, то тогда всё, канэц. По скрипту: 1. Риал эскейп НЕ работает без установки кодировки подключения. Т.к. эскейпит именно относительно кодировки, ибо разные байты и их сочетания в разных кодировках могут означать разные символы, и чтобы принять решение эскейпить или нет ей надо знать, что это за символ. 2. Собирать запрос в массив и иплодить очень удобная тактика, да. Это "ближе к правде" на 99%. Вплотную так сказать. 3. Printf замени на echo. 4. попробуй вдуматься, что не так. Просто выводи готовый запрос перед отправкой в бд и вчитывайся в него.
Re: Как сделать запрос выборки из БД по нескольким столбцам спасибо!)наконец то помогли новичку по делу)))))))))))) буду разбираться
Re: Как сделать запрос выборки из БД по нескольким столбцам я просто написал всё то же самое, только длиннее. Ибо если ты начнёшь следовать моему совету понимать, что делаешь, то остальные советы просто не понадобятся. И да, т.к. тот код, что ты разместил, должен делать хоть что-то, то скажи, что он делает и чего не делает. А то теперь не ясно, чего тебе нужно.
Re: Как сделать запрос выборки из БД по нескольким столбцам есть форма поиска - 3 поля - имя, город, год рождения мне нужен поиск по БД sql на php который ищет по 3 полям поиска, и надо чтоб он искал по любому количеству полей выбранных пользователем, т.е. по 1, или по 2 или по 3. Как в ВКонтакте - можно выбрать 1 поле и выпадет какой-то список юзеров, а можно выбрать 2-3-4 поля и соответственно выпадет уточненный список юзеров, но так чтоб поиск объединял выбранные пользователем поля, например в БД у меня есть Михаил-Москва-1999г.р., и Андрей-Воронеж-1984г.р. - так вот чтоб по выбранному полю Москва-1999г.р. - выводился Михаил, а если Михаил-Воронеж - то писал бы ошибку т.к. такого сочетания параметров в БД нет
Re: Как сделать запрос выборки из БД по нескольким столбцам ну вроде ты добился результата. Так в чем проблема на текущий момент?
ну во первых не работает)))) а во-вторых поковырявшись в коде понял что похоже ошибка где-то тут: - не правильно формирует массив и соответственно не правильно передает данные в sql запрос: Код (PHP): { $first_name = trim($_REQUEST['first_name']); $nas_punct = trim($_REQUEST['nas_punct']); $birthday = trim($_REQUEST['birthday']); } /* Выполнение SQL запроса */ $data = array(); if(!empty($_POST['first_name'])) $data[] = "'first_name'='".($_POST['first_name'])."'"; if(!empty($_POST['nas_punct'])) $data[] = "'nas_punct'='".($_POST['nas_punct'])."'"; if(!empty($_POST['birthday'])) $data[] = "'birthday'='".($_POST['birthday'])."'"; if(count($data) > 0) а где именно не пойму Добавлено спустя 4 минуты 21 секунду: Re: Как сделать запрос выборки из БД по нескольким столбцам отсе хотя вот проверяю подставляя данные в array: Код (PHP): /* Выполнение SQL запроса */ $data = array('Михаил', 'Москва', '1999'); if(count($data) > 0) { mysql_query( "SELECT * FROM USERS WHERE ".implode(' AND ', $data) ); } $result = mysql_query($data) or die("Запрос ошибочный"); и все равно не работает дает "Запрос ошибочный" Подсказка от модератора: Любой код или текст конфигурации пишите между тегом [code=php] и [/code]. Используйте отступы в коде для форматирования текста. Это помогает быстрее понять вас, увеличивает шанс на получение ответа. Что выделять? Например: PHP, HTML, CSS, JavaScript, SQL, XML, .htaccess, ini, регулярные выражения, код шаблонизаторов, любая другая разметка, результаты array/object dump и т. д.
Re: Как сделать запрос выборки из БД по нескольким столбцам что именно не работает? просто посмотри запрос, что ты гадаешь-то потому что ты ищешь там, где тебе лучше видно, как в анекдоте про мужика, ключи и фонарный столб. а запрос не смотришь и ты не знаешь, почему, потому что не посмотрел запрос. Может там чёртик выскакивает посреди строки, такое бывает. Нужно же проверить сам запрос.
ну так : Код (PHP): $data = array('Михаил', 'Москва', '1999'); - массив данных Код (PHP): SELECT * - выбрать все FROM USERS - из таблицы USERS WHERE ".implode(' AND ', $data) - где данные берутся и объединяются из массива array через AND Добавлено спустя 5 минут 17 секунд: Re: Как сделать запрос выборки из БД по нескольким столбцам отсе в phpMyAdmin я не могу посмотреть с кодом Код (PHP): $data = array('Михаил', 'Москва', '1999'); if(count($data) > 0) { mysql_query( "SELECT * FROM USERS WHERE ".implode(' AND ', $data) ); } $result = mysql_query($data) or die("Запрос ошибочный"); Подсказка от модератора: Любой код или текст конфигурации пишите между тегом [code=php] и [/code]. Используйте отступы в коде для форматирования текста. Это помогает быстрее понять вас, увеличивает шанс на получение ответа. Что выделять? Например: PHP, HTML, CSS, JavaScript, SQL, XML, .htaccess, ini, регулярные выражения, код шаблонизаторов, любая другая разметка, результаты array/object dump и т. д.
Re: Как сделать запрос выборки из БД по нескольким столбцам drey19061984, а нечтение документации на русском языке - это такая принципиальная игра у вас? Да и не только у вас. Что за фигню рисуете в запросе? Ведь легко найти документацию по select на русском языке: http://pogugli.com/?114862 Потом, сначала пишется запрос на SQL, отлаживается в phpmyadmin или другом клиенте, потом пишется код php, который склеивает такую же строку запроса.
Re: Как сделать запрос выборки из БД по нескольким столбцам ПОСМОТРИ ЗАПРОС КОТОРЫЙ ПОЛУЧАЕТСЯ ПОСЛЕ СКЛЕЙКИ ВСЕГО-ВСЕГО, АГА
Re: Как сделать запрос выборки из БД по нескольким столбцам хуясно. Запрос покажи, который получается - будет дальше развитие беседы. Умолять тебя соизволить сделать то, о чем я тебя прошу, чтобы тебе же помочь я внезапно не буду. =)