Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737
Форумы портала PHP.SU :: Как сделать составной запрос к БД?

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


 Страниц (1): [1]   

> Описание: Как сделать запрос выборки из БД по нескольким столбцам отсекая лишние данные
drey19061984
Отправлено: 13 Февраля, 2016 - 21:43:58
Post Id


Новичок


Покинул форум
Сообщений всего: 9
Дата рег-ции: Янв. 2016  


Помог: 0 раз(а)




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

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

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


как выглядит форма поиска на сайте прилагаю

так вот делаю запрос к БД:
CODE (SQL):
скопировать код в буфер обмена
  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.    
  30.     if (mysql_num_rows($result) == 0) {
  31.         echo "Результаты по заданным параметрам не найдены!";
  32.         exit;
  33.     }
  34.     while ($row = mysql_fetch_assoc($result))
  35.    
  36.     {
  37.         printf("
  38. <p>ФИО: " .$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. </ul>
  43.  
  44. </div>
  45. "
  46.         );
  47. }
  48. ?>


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


ну хорошо у в таком виде что не так? почему не работает - выдает "Запрос ошибочный"?вроде сделал то что мне написали: IF - есть, новая переменная объединяющая условия выборки есть...


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.  
  17. if(!empty($_POST['first_name']))
  18. $data[] = "`first_name`='".mysql_real_escape_string($_POST['first_name'])."'";
  19. if(!empty($_POST['nas_punct']))
  20. $data[] = "`nas_punct`='".mysql_real_escape_string($_POST['nas_punct'])."'";
  21. if(!empty($_POST['birthday']))
  22. $data[] = "`birthday`='".mysql_real_escape_string($_POST['birthday'])."'";
  23. if(count($data) > 0)
  24. {
  25.               "SELECT `FIRST_NAME`, `NAS_PUNKT`, `BIRTHDAY_YEAR`
  26.               FROM USERS
  27.               WHERE ".implode(' AND ', $data)
  28.                );
  29. }
  30. $result = mysql_query($data) or die("Запрос ошибочный");
  31. if (!$result) {
  32.         echo "Could not successfully run query ($data) from DB: " . mysql_error();
  33.         exit;
  34.     }
  35.     if (mysql_num_rows($result) == 0) {
  36.         echo "Результаты по заданным параметрам не найдены!";
  37.         exit;
  38.     }
  39.     while ($row = mysql_fetch_assoc($result))
  40.     {
  41.         printf("
  42.  
  43. <p>ФИО: " .$row['LAST_NAME'] . " " .$row['FIRST_NAME'] . " " .$row['MIDDLE_NAME'] . "  </p>
  44. <ul>
  45. <li>Город: " .$row['NAS_PUNKT'] ." </li>
  46. <li>Год рождения: " .$row['BIRTHDAY_YEAR'] ." </li>
  47. <li>Дом.телефон: " .$row['PHONE_1'] ." </li>
  48. <li>E-mail: " .$row['EMAIL'] ." </li>
  49. </ul>
  50. "
  51.         );
  52. }
  53.  
  54. ?>

(Отредактировано автором: 13 Февраля, 2016 - 23:24:34)

 
 Top
exlant
Отправлено: 13 Февраля, 2016 - 23:22:09
Post Id



Посетитель


Покинул форум
Сообщений всего: 425
Дата рег-ции: Февр. 2015  


Помог: 14 раз(а)




Если я правильно понял, то в запросе mysql OR на AND заменить
 
 Top
drey19061984
Отправлено: 13 Февраля, 2016 - 23:26:00
Post Id


Новичок


Покинул форум
Сообщений всего: 9
Дата рег-ции: Янв. 2016  


Помог: 0 раз(а)




exlant пишет:
Если я правильно понял, то в запросе mysql OR на AND заменить


вроде уже сделал
CODE (SQL):
скопировать код в буфер обмена
  1. WHERE ".implode(' AND ', $data)
  2.  
 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Вопросы новичков »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB