За последние 24 часа нас посетили 17433 программиста и 1713 роботов. Сейчас ищут 1736 программистов ...

Как сделать запрос выборки из БД по нескольким столбцам отсе

Тема в разделе "PHP для новичков", создана пользователем drey19061984, 13 фев 2016.

  1. drey19061984

    drey19061984 Новичок

    С нами с:
    23 янв 2016
    Сообщения:
    88
    Симпатии:
    0
    Не нашел в интернете ответа, подскажите пожалуйста - Как сделать запрос выборки из БД по нескольким столбцам отсекая лишние данные
    Есть БД с пользователями такая

    ID ИМЯ ГОД РОЖДЕНИЯ ГОРОД
    id FIRST_NAME BIRTHDAY_YEAR NAS_PUNKT
    1 Михаил 1999 Москва
    2 Иван 1984 Воронеж

    - то есть если в поиске выбрали Михаил+Москва (сейчас выводиться правильно), а если выбрали Михаил+Воронеж - показывало что такого результата нет! то есть что в БД такая комбинация не найдена (т.е. нет пользователя с данными и имя-Михаил и город-Воронеж), а сейчас показывает и Михаила и Ивана т.к. при поиске у одного совпадает имя а у второго город, как это отфильтровать???

    [[​IMG]
    так вот делаю запрос к БД:
    Код (PHP):
    1. SELECT *
    2.     FROM USERS
    3.     WHERE FIRST_NAME = '$first_name'
    4.         OR NAS_PUNKT = '$city'
    5.         OR BIRTHDAY_YEAR = '$birthday' 
    код ПХП:

    Код (PHP):
    1. <?php
    2. require '../database_connection.php';
    3.  
    4. if (!mysql_connect(DATABASE_HOST, DATABASE_USERNAME, DATABASE_PASSWORD)) {
    5.     exit('Cannot connect to server');
    6. }
    7. if (!mysql_select_db(DATABASE_NAME)) {
    8.     exit('Cannot select database');
    9. }
    10. {
    11. $first_name = trim($_REQUEST['first_name']);
    12. $nas_punct = trim($_REQUEST['nas_punct']);
    13. $birthday = trim($_REQUEST['birthday']);
    14. }
    15. /* Выполнение SQL запроса */
    16. $query = "
    17. SELECT *
    18.     FROM USERS
    19.     WHERE FIRST_NAME = '$first_name'
    20.         OR NAS_PUNKT = '$nas_punct'
    21.         OR BIRTHDAY_YEAR = '$birthday'
    22.  
    23. ";
    24. $result = mysql_query($query) or die("Запрос ошибочный");
    25. if (!$result) {
    26.         echo "Could not successfully run query ($query) from DB: " . mysql_error();
    27.         exit;
    28.     }
    29.     if (mysql_num_rows($result) == 0) {
    30.         echo "Результаты по заданным параметрам не найдены!";
    31.         exit;
    32.     }
    33.     while ($row = mysql_fetch_assoc($result)) 
    34.     {
    35.     printf("
    36.  
    37. <p>ФИО: " .$row['LAST_NAME'] . " " .$row['FIRST_NAME'] . " " .$row['MIDDLE_NAME'] . "  </p> 
    38. <ul>
    39. <li>Город: " .$row['NAS_PUNKT'] ." </li>
    40. <li>Год рождения: " .$row['BIRTHDAY_YEAR'] ." </li>
    41. </ul>
    42.  
    43. </div>
    44. "
    45.     );
    46. }
    47. ?>
    как сделать?
     
  2. Ganzal

    Ganzal Суперстар
    Команда форума Модератор

    С нами с:
    15 мар 2007
    Сообщения:
    9.893
    Симпатии:
    965
    Re: Как сделать запрос выборки из БД по нескольким столбцам

    логику с или на и заменить
     
  3. drey19061984

    drey19061984 Новичок

    С нами с:
    23 янв 2016
    Сообщения:
    88
    Симпатии:
    0
    Re: Как сделать запрос выборки из БД по нескольким столбцам

    это уже пробовал - тогда если задаем поиск не по всем полям а только по 1 или 2 то выдает что результаты не найдены((((((((
     
  4. Ganzal

    Ganzal Суперстар
    Команда форума Модератор

    С нами с:
    15 мар 2007
    Сообщения:
    9.893
    Симпатии:
    965
    Re: Как сделать запрос выборки из БД по нескольким столбцам

    какой ужас. наверное нужно делать составной запрос чтоб отсеивать поля по которым не идет поиск?
     
  5. drey19061984

    drey19061984 Новичок

    С нами с:
    23 янв 2016
    Сообщения:
    88
    Симпатии:
    0
    Re: Как сделать запрос выборки из БД по нескольким столбцам

    я так понял что да, но прочитав про составные запросы - там все равно какой-то запрос главный а все остальные последующие т.е. сначала выбираем город например - Москва, если выбрали Москва вылезут все пользователи из Москвы , потом если ввели Москва+год рождения 1999 то вылезут все из Москвы 1999г.р., а мне надо как в ВК, чтоб даже если я не выбрал город, а выбрал только год рождения 1999 то все равно вылазили б только все с годом рождения 1999
     
  6. Ganzal

    Ganzal Суперстар
    Команда форума Модератор

    С нами с:
    15 мар 2007
    Сообщения:
    9.893
    Симпатии:
    965
    Re: Как сделать запрос выборки из БД по нескольким столбцам

    нет, составной запрос не так делается. пишешь в переменную "заголовок" запроса, потом проверяешь ифами какие у тебя фильтры есть, накидываешь их к основному запросу с логикой и. и выполняешь полученный текста запроса.

    Добавлено спустя 6 минут 58 секунд:
    Re: Как сделать запрос выборки из БД по нескольким столбцам отсе
    и да, совершенно не обязательно создавать 100500 тем на каждый пук своего сознания. все эти вопросы можно было порешать в рамках уже созданного треда. потому что это лишь развитие треда. ты продолжаешь тупить поэтому тот тред развивается и не стремится к закрытия. не надо создавать еще одну тему в которой ты дальше будешь тупить. тупи в одной теме.
     
  7. drey19061984

    drey19061984 Новичок

    С нами с:
    23 янв 2016
    Сообщения:
    88
    Симпатии:
    0
    Re: Как сделать запрос выборки из БД по нескольким столбцам

    а где конкретно "Заголовок запроса"?и как проверить фильтрами?
     
  8. drey19061984

    drey19061984 Новичок

    С нами с:
    23 янв 2016
    Сообщения:
    88
    Симпатии:
    0
    так?
    Код (PHP):
    1. {
    2. $first_name = trim($_REQUEST['first_name']);
    3. $nas_punct = trim($_REQUEST['nas_punct']);
    4. $birthday = trim($_REQUEST['birthday']);
    5. $новая переменная = 'SELECT * FROM USERS  
    6. WHERE 
    7.         FIRST_NAME = '$first_name'
    8.         AND NAS_PUNKT = '$nas_punct'
    9.         AND BIRTHDAY_YEAR = '$birthday' ";
    10. }
    11.  
    12. * Выполнение SQL запроса */
    13. $query = "SELECT * FROM USERS
    14.     WHERE FIRST_NAME= '$f'
    15.         AND NAS_PUNKT = '$n
    16. ";
    17.  
    18. $result = mysql_query($query) or die("Запрос ошибочный");
    19.  
    20. if ($first_name == 0 ) {
    21.    ('какое-то действие');
    22. }
    23. if (isset($first_name )) {
    24.     $first_name = $f;
    25. }
    26. if (isset($nas_punct )) {
    27.  
    28. if ($nas_punct == 0 ) {
    29.    ('какое-то действие');
    30. }
    31. if (isset($nas_punct )) {
    32.     $nas_punct = $n;
    33. }
    я хоть что-то правильно понял из тобой написанного?
    только к чему новая переменная с запросом внутри?
     
  9. drey19061984

    drey19061984 Новичок

    С нами с:
    23 янв 2016
    Сообщения:
    88
    Симпатии:
    0
    или может примерно так??????? (нашел наконец на одном форуме подогнал под свою ситуацию)
    Код (PHP):
    1. <?php
    2. require '../php_primer/database_connection.php';
    3. if (!mysql_connect(DATABASE_HOST, DATABASE_USERNAME, DATABASE_PASSWORD)) {
    4.     exit('Cannot connect to server');
    5. }
    6. if (!mysql_select_db(DATABASE_NAME)) {
    7.     exit('Cannot select database');
    8. }
    9. {
    10. $first_name = trim($_REQUEST['first_name']);
    11. $nas_punct = trim($_REQUEST['nas_punct']);
    12. $birthday = trim($_REQUEST['birthday']);
    13. }
    14. /* Выполнение SQL запроса */
    15. $data = array();
    16.  if(!empty($_POST['first_name']))
    17. $data[] = "`first_name`='".mysql_real_escape_string($_POST['first_name'])."'";
    18. if(!empty($_POST['nas_punct']))
    19. $data[] = "`nas_punct`='".mysql_real_escape_string($_POST['nas_punct'])."'";
    20. if(!empty($_POST['birthday']))
    21. $data[] = "`birthday`='".mysql_real_escape_string($_POST['birthday'])."'";
    22. if(count($data) > 0)
    23. {
    24.               "SELECT `FIRST_NAME`, `NAS_PUNKT`, `BIRTHDAY_YEAR`
    25.                FROM USERS
    26.                WHERE ".implode(' AND ', $data)
    27.                );
    28. }
    29. $result = mysql_query($data) or die("Запрос ошибочный");
    30. if (!$result) {
    31.         echo "Could not successfully run query ($data) from DB: " . mysql_error();
    32.         exit;
    33.     }
    34.     if (mysql_num_rows($result) == 0) {
    35.         echo "Результаты по заданным параметрам не найдены!";
    36.         exit;
    37.     }
    38.     while ($row = mysql_fetch_assoc($result)) 
    39.     {
    40.     printf("
    41. <p>ФИО: " .$row['LAST_NAME'] . " " .$row['FIRST_NAME'] . " " .$row['MIDDLE_NAME'] . "  </p> 
    42. <ul>
    43. <li>Город: " .$row['NAS_PUNKT'] ." </li>
    44. <li>Год рождения: " .$row['BIRTHDAY_YEAR'] ." </li>
    45. <li>Дом.телефон: " .$row['PHONE_1'] ." </li>
    46. <li>E-mail: " .$row['EMAIL'] ." </li>
    47. </ul>"    );
    48. }
    49. ?>
    но что-то опять не так(((((((((((((((( в чем ошибка???
    ну это хоть ближе к правде?
     
  10. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    Re: Как сделать запрос выборки из БД по нескольким столбцам

    Пока ты не начнешь понимать что ты делаешь, ты не начнешь понимать, почему оно не работает.
     
  11. drey19061984

    drey19061984 Новичок

    С нами с:
    23 янв 2016
    Сообщения:
    88
    Симпатии:
    0
    Re: Как сделать запрос выборки из БД по нескольким столбцам

    спасибо за нравоучения вопрос был -
     
  12. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    Re: Как сделать запрос выборки из БД по нескольким столбцам

    ага, давай ещё раз, пока не поймёшь.
    То, что ты у кого-то взял было ближе к правде у него. А то, что ты натянул на свою структуру БД может быть ближе, а может и нет. И нужен кто-то, кто в это дело серьёзно вчитается и вдумается. Если это не хочешь делать ты, то тогда всё, канэц.

    По скрипту:
    1. Риал эскейп НЕ работает без установки кодировки подключения. Т.к. эскейпит именно относительно кодировки, ибо разные байты и их сочетания в разных кодировках могут означать разные символы, и чтобы принять решение эскейпить или нет ей надо знать, что это за символ.

    2. Собирать запрос в массив и иплодить очень удобная тактика, да. Это "ближе к правде" на 99%. Вплотную так сказать.

    3. Printf замени на echo.

    4. попробуй вдуматься, что не так. Просто выводи готовый запрос перед отправкой в бд и вчитывайся в него.
     
  13. drey19061984

    drey19061984 Новичок

    С нами с:
    23 янв 2016
    Сообщения:
    88
    Симпатии:
    0
    Re: Как сделать запрос выборки из БД по нескольким столбцам

    спасибо!)наконец то помогли новичку по делу)))))))))))) буду разбираться
     
  14. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    Re: Как сделать запрос выборки из БД по нескольким столбцам

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

    И да, т.к. тот код, что ты разместил, должен делать хоть что-то, то скажи, что он делает и чего не делает. А то теперь не ясно, чего тебе нужно.
     
  15. drey19061984

    drey19061984 Новичок

    С нами с:
    23 янв 2016
    Сообщения:
    88
    Симпатии:
    0
    Re: Как сделать запрос выборки из БД по нескольким столбцам

    есть форма поиска - 3 поля - имя, город, год рождения
    мне нужен поиск по БД sql на php который ищет по 3 полям поиска, и надо чтоб он искал по любому количеству полей выбранных пользователем, т.е. по 1, или по 2 или по 3. Как в ВКонтакте - можно выбрать 1 поле и выпадет какой-то список юзеров, а можно выбрать 2-3-4 поля и соответственно выпадет уточненный список юзеров, но так чтоб поиск объединял выбранные пользователем поля, например в БД у меня есть Михаил-Москва-1999г.р., и Андрей-Воронеж-1984г.р. - так вот чтоб по выбранному полю Москва-1999г.р. - выводился Михаил, а если Михаил-Воронеж - то писал бы ошибку т.к. такого сочетания параметров в БД нет
     
  16. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    Re: Как сделать запрос выборки из БД по нескольким столбцам

    ну вроде ты добился результата. Так в чем проблема на текущий момент?
     
  17. drey19061984

    drey19061984 Новичок

    С нами с:
    23 янв 2016
    Сообщения:
    88
    Симпатии:
    0
    ну во первых не работает)))) а во-вторых поковырявшись в коде понял что похоже ошибка где-то тут:
    - не правильно формирует массив и соответственно не правильно передает данные в sql запрос:
    Код (PHP):
    1. {
    2. $first_name = trim($_REQUEST['first_name']);
    3. $nas_punct = trim($_REQUEST['nas_punct']);
    4. $birthday = trim($_REQUEST['birthday']);
    5. }
    6. /* Выполнение SQL запроса */
    7. $data = array();
    8. if(!empty($_POST['first_name']))
    9. $data[] = "'first_name'='".($_POST['first_name'])."'";
    10. if(!empty($_POST['nas_punct']))
    11. $data[] = "'nas_punct'='".($_POST['nas_punct'])."'";
    12. if(!empty($_POST['birthday']))
    13. $data[] = "'birthday'='".($_POST['birthday'])."'";
    14. if(count($data) > 0) 
    а где именно не пойму

    Добавлено спустя 4 минуты 21 секунду:
    Re: Как сделать запрос выборки из БД по нескольким столбцам отсе
    хотя вот проверяю подставляя данные в array:
    Код (PHP):
    1. /* Выполнение SQL запроса */
    2. $data = array('Михаил', 'Москва', '1999');
    3.  
    4. if(count($data) > 0)
    5. {
    6.               "SELECT *
    7.                FROM USERS
    8.                WHERE ".implode(' AND ', $data)
    9.                );
    10. }
    11. $result = mysql_query($data) or die("Запрос ошибочный"); 
    и все равно не работает дает "Запрос ошибочный"

    Подсказка от модератора:
    Любой код или текст конфигурации пишите между тегом [code=php] и [/code].
    Используйте отступы в коде для форматирования текста.
    Это помогает быстрее понять вас, увеличивает шанс на получение ответа.
    Что выделять? Например: PHP, HTML, CSS, JavaScript, SQL, XML, .htaccess, ini, регулярные выражения, код шаблонизаторов, любая другая разметка, результаты array/object dump и т. д.
     
  18. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    Re: Как сделать запрос выборки из БД по нескольким столбцам

    что именно не работает?

    просто посмотри запрос, что ты гадаешь-то

    потому что ты ищешь там, где тебе лучше видно, как в анекдоте про мужика, ключи и фонарный столб.

    а запрос не смотришь

    и ты не знаешь, почему, потому что не посмотрел запрос. Может там чёртик выскакивает посреди строки, такое бывает. Нужно же проверить сам запрос.
     
  19. drey19061984

    drey19061984 Новичок

    С нами с:
    23 янв 2016
    Сообщения:
    88
    Симпатии:
    0
    ну так :
    Код (PHP):
    1. $data = array('Михаил', 'Москва', '1999'); 
    - массив данных
    Код (PHP):
    1. SELECT * - выбрать все
    2.                FROM USERS - из таблицы USERS
    3.                WHERE ".implode(' AND ', $data) - где данные берутся и объединяются из массива array через AND
    Добавлено спустя 5 минут 17 секунд:
    Re: Как сделать запрос выборки из БД по нескольким столбцам отсе
    в phpMyAdmin я не могу посмотреть с кодом
    Код (PHP):
    1. $data = array('Михаил', 'Москва', '1999');
    2.  
    3. if(count($data) > 0)
    4. {
    5.               "SELECT *
    6.                FROM USERS
    7.                WHERE ".implode(' AND ', $data)
    8.                );
    9. }
    10. $result = mysql_query($data) or die("Запрос ошибочный"); 
    Подсказка от модератора:
    Любой код или текст конфигурации пишите между тегом [code=php] и [/code].
    Используйте отступы в коде для форматирования текста.
    Это помогает быстрее понять вас, увеличивает шанс на получение ответа.
    Что выделять? Например: PHP, HTML, CSS, JavaScript, SQL, XML, .htaccess, ini, регулярные выражения, код шаблонизаторов, любая другая разметка, результаты array/object dump и т. д.
     
  20. mkramer

    mkramer Суперстар
    Команда форума Модератор

    С нами с:
    20 июн 2012
    Сообщения:
    8.583
    Симпатии:
    1.761
    Re: Как сделать запрос выборки из БД по нескольким столбцам

    drey19061984, а нечтение документации на русском языке - это такая принципиальная игра у вас? Да и не только у вас. Что за фигню рисуете в запросе? Ведь легко найти документацию по select на русском языке: http://pogugli.com/?114862
    Потом, сначала пишется запрос на SQL, отлаживается в phpmyadmin или другом клиенте, потом пишется код php, который склеивает такую же строку запроса.
     
  21. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    Re: Как сделать запрос выборки из БД по нескольким столбцам

    ПОСМОТРИ ЗАПРОС КОТОРЫЙ ПОЛУЧАЕТСЯ ПОСЛЕ СКЛЕЙКИ ВСЕГО-ВСЕГО, АГА
     
  22. drey19061984

    drey19061984 Новичок

    С нами с:
    23 янв 2016
    Сообщения:
    88
    Симпатии:
    0
     
  23. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    Re: Как сделать запрос выборки из БД по нескольким столбцам

    бон вояж
     
  24. drey19061984

    drey19061984 Новичок

    С нами с:
    23 янв 2016
    Сообщения:
    88
    Симпатии:
    0
    Re: Как сделать запрос выборки из БД по нескольким столбцам

    ясно
     
  25. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    Re: Как сделать запрос выборки из БД по нескольким столбцам

    хуясно. Запрос покажи, который получается - будет дальше развитие беседы. Умолять тебя соизволить сделать то, о чем я тебя прошу, чтобы тебе же помочь я внезапно не буду. =)