За последние 24 часа нас посетили 17519 программистов и 1719 роботов. Сейчас ищут 1689 программистов ...

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

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

  1. drey19061984

    drey19061984 Новичок

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

    я бы показал не понимаю как это сделать
     
  2. igordata

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

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

    подумай
     
  3. drey19061984

    drey19061984 Новичок

    С нами с:
    23 янв 2016
    Сообщения:
    88
    Симпатии:
    0
    с кодом:
    Код (PHP):
    1. <?php
    2. require '../php_primer/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. /* Выполнение SQL запроса */
    11. $data = array();
    12. if(!empty($_REQUEST['first_name']))
    13. $data[] = "'first_name'='".($_REQUEST['first_name'])."'";
    14. if(!empty($_REQUEST['nas_punct']))
    15. $data[] = "'nas_punct'='".($_REQUEST['nas_punct'])."'";
    16. if(!empty($_REQUEST['birthday']))
    17. $data[] = "'birthday'='".($_REQUEST['birthday'])."'";
    18. if(count($data) > 0)
    19. {
    20.               "SELECT 'FIRST_NAME', 'NAS_PUNKT', 'BIRTHDAY_YEAR'
    21.                FROM USERS
    22.                WHERE '.implode(' AND ', $data)"
    23.                );
    24. }
    25. echo $data;
    26. var_dump($data);
    27. print_r($data);
    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.     echo("
    41. <p style='font-size: 25px;margin-bottom: 10px;'>ФИО: " .$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. </ul>
    47.  
    48. <p style='font-size: 18px;margin-top: 0px;'><a href='../php_primer/show_user222.php?idUSERS=" .$row['idUSERS'] . "'>Посмотреть проект полностью</a></p>
    49. ---------<br/>
    50. "
    51.     );
    52. }
    53.  
    54. ?>
    выдает такое:
    Код (PHP):
    1. Arrayarray(3) { [0]=> string(27) "'first_name'='Михаил'" [1]=> string(26) "'nas_punct'='Москва'" [2]=> string(17) "'birthday'='1999'" } Array ( [0] => 'first_name'='Михаил' [1] => 'nas_punct'='Москва' [2] => 'birthday'='1999' ) Запрос ошибочный
    это то что нужно???

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

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

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

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

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

    С нами с:
    9 дек 2014
    Сообщения:
    12.227
    Симпатии:
    1.714
    Адрес:
    Молдова, г.Кишинёв
  6. drey19061984

    drey19061984 Новичок

    С нами с:
    23 янв 2016
    Сообщения:
    88
    Симпатии:
    0
    вот такой код
    Код (PHP):
    1. /* Выполнение SQL запроса */
    2. $data = array();
    3. if(!empty($_REQUEST['first_name']))
    4. $data[] = "FIRST_NAME='".($_REQUEST['first_name'])."'";
    5. if(!empty($_REQUEST['nas_punct']))
    6. $data[] = "NAS_PUNKT='".($_REQUEST['nas_punct'])."'";
    7. if(!empty($_REQUEST['birthday']))
    8. $data[] = "BIRTHDAY_YEAR='".($_REQUEST['birthday'])."'";
    9. if(count($data) > 0)
    10. {
    11.               "SELECT 'FIRST_NAME', 'NAS_PUNKT', 'BIRTHDAY_YEAR'
    12.                FROM USERS
    13.                WHERE ".implode(' AND ', $data)
    14.                );
    15. }
    16. $query = "SELECT 'FIRST_NAME', 'NAS_PUNKT', 'BIRTHDAY_YEAR'
    17. FROM USERS WHERE ".implode(' AND ', $data);
    18. echo $query; // чтоб посмотреть что передается
    19. $result = mysql_query($data) or die(mysql_error()); 
    дает
    Код (PHP):
    1. SELECT 'FIRST_NAME', 'NAS_PUNKT', 'BIRTHDAY_YEAR' FROM USERS WHERE FIRST_NAME='Михаил' AND NAS_PUNKT='Москва' AND BIRTHDAY_YEAR='1999' 
    это то???

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

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

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

    то! =) Ура. Теперь в пма воткни это и смотри ошибку. Для начала названия полей и таблиц все должны быть в обратных кавычках, чтобы не путать мускул. Год рождения наверное имеет смысл сделать числом а не строкой.
     
  8. 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.  
    11. /* Выполнение SQL запроса */
    12. $data = array();
    13. if(!empty($_REQUEST['first_name']))
    14. $data[] = "FIRST_NAME='".($_REQUEST['first_name'])."'";
    15. if(!empty($_REQUEST['nas_punct']))
    16. $data[] = "NAS_PUNKT='".($_REQUEST['nas_punct'])."'";
    17. if(!empty($_REQUEST['birthday']))
    18. $data[] = "BIRTHDAY_YEAR='".($_REQUEST['birthday'])."'";
    19. if(count($data) > 0)
    20. {
    21.               "SELECT 'FIRST_NAME', 'NAS_PUNKT', 'BIRTHDAY_YEAR'
    22.                FROM USERS
    23.                WHERE ".implode(' AND ', $data)
    24.                );
    25. }
    26. $query = "SELECT 'FIRST_NAME', 'NAS_PUNKT', 'BIRTHDAY_YEAR'
    27. FROM USERS WHERE ".implode(' AND ', $data);
    28. echo $query; // чтоб посмотреть что передается
    29. $result = mysql_query($query) or die(mysql_error());
    30. if (!$result) {
    31.         echo "Could not successfully run query ($query) 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 style='font-size: 25px;margin-bottom: 10px;'>ФИО: " .$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. </ul>
    47.  
    48. <p style='font-size: 18px;margin-top: 0px;'><a href='../php_primer/show_user222.php?idUSERS=" .$row['idUSERS'] . "'>Посмотреть проект полностью</a></p>
    49. ---------<br/>
    50. "
    51.     );
    52. }
    53.  
    54. ?>
    выдает поисковые результаты правильно т.е. в БД есть Михаил-Москва-1999 года рождения - если выбираю Михаил-Москва или Москва-1999 то выдается правильно 1 результат т.к. одно совпадение по БД, или Михаил-Воронеж - такие результаты не найдены - НО!!! не показывает сами выбранные поля т.е. имя - Михаил и другие данные т.е.
    выдает так
    Код (PHP):
    1. SELECT 'FIRST_NAME', 'NAS_PUNKT', 'BIRTHDAY_YEAR' FROM USERS WHERE FIRST_NAME='Михаил' AND NAS_PUNKT='Москва' AND BIRTHDAY_YEAR='1999'
    2. ФИО: FIRST_NAME
    3. Город: NAS_PUNKT
    4. Год рождения: BIRTHDAY_YEAR
    5. Дом.телефон:
    6. Посмотреть проект полностью
    как поправить?помогите чутьчуть осталось!!!!!!!!!!!!!!!!!

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

    p@R@dox 55RU Зэк
    [ БАН ]

    С нами с:
    21 май 2014
    Сообщения:
    1.358
    Симпатии:
    7
    Адрес:
    с планеты Ялмез
    Re: Как сделать запрос выборки из БД по нескольким столбцам

    в SELECT перечисли нужные тебе поля... или укажи SELECT * - все поля выведутся ((:)
     
  10. 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. /* Выполнение SQL запроса */
    10. $data = array();
    11. if(!empty($_REQUEST['first_name']))
    12. $data[] = "`FIRST_NAME`='".($_REQUEST['first_name'])."'";
    13. if(!empty($_REQUEST['nas_punct']))
    14. $data[] = "`NAS_PUNKT`='".($_REQUEST['nas_punct'])."'";
    15. if(!empty($_REQUEST['birthday']))
    16. $data[] = "`BIRTHDAY_YEAR`='".($_REQUEST['birthday'])."'";
    17. if(count($data) > 0)
    18. {
    19.               "SELECT *
    20.                FROM `USERS`
    21.                WHERE ".implode(' AND ', $data)
    22.                );
    23. }
    24. $query = "SELECT *
    25. FROM `USERS` WHERE ".implode(' AND ', $data);
    26. $result = mysql_query($query) or die(mysql_error());
    27. if (!$result) {
    28.         echo "Could not successfully run query ($query) from DB: " . mysql_error();
    29.         exit;
    30.     }
    31.     if (mysql_num_rows($result) == 0) {
    32.         echo "Результаты по заданным параметрам не найдены!";
    33.         exit;
    34.     }
    35.     while ($row = mysql_fetch_assoc($result)) 
    36.     {
    37.     printf ("
    38. <p style='font-size: 25px;margin-bottom: 10px;'>ФИО: " .$row['LAST_NAME'] . " " .$row['FIRST_NAME'] . " " .$row['MIDDLE_NAME'] . "  </p> 
    39. <ul>
    40. <li>Город: " .$row['NAS_PUNKT'] ." </li>
    41. <li>Год рождения: " .$row['BIRTHDAY_YEAR'] ." </li>
    42. <li>Дом.телефон: " .$row['PHONE_1'] ." </li>
    43. </ul>
    44. <p><a href='../php_primer/show_user222.php?idUSERS=" .$row['idUSERS'] . "'>Посмотреть проект полностью</a></p>
    45. ---------<br/>
    46. "    );
    47. }
    48. ?>
    ВСЕ РАБОТАЕТ!!!ДЛЯ ВАС КАК ДЛЯ ПРОФИ ЭТО МЕЛОЧЬ А ДЛЯ МЕНЯ ЧИСТЫЙ КАЙФ))))
    P.S.: ОСОБЫЕ БЛАГОДАРНОСТИ: igordata - за терпение и тычки в правильную сторону, и Ganzal - за помощь и направление в нужную сторону в начале темы))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))

    Добавлено спустя 10 минут 48 секунд:
    Re: Как сделать запрос выборки из БД по нескольким столбцам отсе
    блин только если все поля пустые то выдает
    Код (PHP):
    1. You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '' at line 2
    ((((((((((((((((((((((((((

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

    p@R@dox 55RU Зэк
    [ БАН ]

    С нами с:
    21 май 2014
    Сообщения:
    1.358
    Симпатии:
    7
    Адрес:
    с планеты Ялмез
    Re: Как сделать запрос выборки из БД по нескольким столбцам

    ребят - сочувствую :D :D
    помогите уже парню....
     
  12. drey19061984

    drey19061984 Новичок

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

    ахах ну хватит стебаться то уже - первая рабочая программа же))))))))))))))))))))))))))))))))))) я ж от чистого сердца!
     
  13. Ganzal

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

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

    названия полей обрамляются не апострофами (') а грависами (`). строки в свою очередь в большинстве реализаций языка структурированных запросов обрамляются апострофами (')
     
  14. igordata

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

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

    Ну круто, чо. Теперь ты - программист. :D
     
  15. Ganzal

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

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

    программист программистом, а явно данный алгоритм перековеркал. ну прям в лицо мне плюнул ((((
     
  16. igordata

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

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

    зато родил сам в меру понимания.
     
  17. drey19061984

    drey19061984 Новичок

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

    а что не так то? сделал вроде так как ты написал, сделал как мог, собрал инфу где смог - я ж писал что с нуля учить некогда))) ну извиняюсь если что...сделал в меру своего понимания...главное что работает)
     
  18. igordata

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

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

    неплохо ж вышло для первого раза. Очень даже.
     
  19. drey19061984

    drey19061984 Новичок

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

    вашими молитвами)))))))))))и подсказками...
     
  20. p@R@dox 55RU

    p@R@dox 55RU Зэк
    [ БАН ]

    С нами с:
    21 май 2014
    Сообщения:
    1.358
    Симпатии:
    7
    Адрес:
    с планеты Ялмез
    Re: Как сделать запрос выборки из БД по нескольким столбцам

    поднимаю бокал вина за это ((((((:)
     
  21. Ganzal

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

    С нами с:
    15 мар 2007
    Сообщения:
    9.893
    Симпатии:
    965
    я вот про это. ты собрал массив. и правильно собрал. и потом проверил его наполненность. допустим правильно проверил (ниже). и потом сделал запрос... вникуда. а потом уже вне условия длины массива ты... снова собираешь запрос и выполняешь его. а ты не задумывался что если в массиве ничего не будет то у тебя имплод будет пустым и запрос завершится словом WHERE и кажется станет инвалидным?

    Код (PHP):
    1. $query = "select * from table"; // объявил "заголовок" запроса
    2. $data = []; // объявил пустой массив-накопитель для фильтров
    3. // пихаешь по условиям в дейту как ты уже делал. а потом:
    4. if (!empty($data)) { // если есть что-то в массиве. да, совсем не надо получать кол-во элементов и совсем не надо сверять это кол-во с нулём
    5. $query .= "WHERE " . implode(' AND ', $data); // конкатенация условия к запросу
    6. } // конец ветки условия  
    таким образом если условий в дейте не будет то ты получишь просто запрос выборки всех строк. а если будет - дополненный через вэр список фильтров.
     
  22. drey19061984

    drey19061984 Новичок

    С нами с:
    23 янв 2016
    Сообщения:
    88
    Симпатии:
    0
    эмммммммммммммм........
    тоесть ты о том что
    Код (PHP):
    1. {
    2.               "SELECT *
    3.                FROM `USERS`
    4.                WHERE ".implode(' AND ', $data)
    5.                );
    6. } 
    можно просто выкинуть?

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

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

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

    можно ли? =) как сам считаешь?
     
  24. Ganzal

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

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

    я один раз написал алгоритм русскими словами. один раз написал сраный готовый алгоритм сраным пхп-кодом со сраными комментариями.

    ты в первый раз понял как понял и написал как написал после чего я собственно указал что не так и дал сраный готовый сраный пхп-код со сраными комментариями. а ты и снова задаешь какие-то непонятные мне вопросы. ты продолжаешь плевать мне в лицо?
     
  25. drey19061984

    drey19061984 Новичок

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

    судя по тому что после того как выкинул поиск все равно работает думаю можно)