Форум русской поддержки Joomla!® CMS
10.12.2016, 16:45:32 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
   
   Начало   Поиск Joomla 3.0 FAQ Joomla 2.5 FAQ Joomla 1.5 FAQ Правила форума Новости Joomla Реклама Войти Регистрация Помощь  
Страниц: [1]   Вниз
  Добавить закладку  |  Печать  
Автор

Поиск на сайте - SQL запрос

 (Прочитано 228 раз)
0 Пользователей и 1 Гость смотрят эту тему.
john.deff
Осваиваюсь на форуме
***

Репутация: +0/-0
Offline Offline

Пол: Мужской
Сообщений: 112



« : 06.08.2016, 20:27:01 »

есть две таблицы #__objects и #__secret
Пример данных в таблице #__objects
--------------
| id | name |
--------------
| 1 | имя 1 |
| 2 | имя 2 |
| 3 | имя 3 |
|....| имя...|
--------------

Пример данных в таблице #__secret
---------------------------
| id | id_objects |  type  | number |
---------------------------
| 1 |       1        | object | 345677 |
| 2 |       1        | phone | 314677 |
| 3 |       1        | phone | 355572 |
| 4 |       2        | object | 263478 |
| 5 |       3        | object | 764382 |
----------------------------

Вопрос!

как нам получить вывод данных
если:
Код
$value_phone = "677";
$q->select(array('a.*', 'b.*'))
           ->from('#__objects AS a')
           ->join('INNER', '#__secret AS b ON (a.id = b.id_objects)')
           ->where('b.number LIKE "%'.$value_phone.'%"')
 

проблема в том, что моё условие выборки даёт 2 объекта!
а мне надо один объект! в данном случае с id = 1 в таблице #__objects

надеюсь понятно объяснил  Smiley
Записан
dmitry_stas
Профи
********

Репутация: +798/-4
Offline Offline

Сообщений: 7784



« Ответ #1 : 06.08.2016, 23:07:42 »

Вопрос!

как нам получить вывод данных
вывод данных - это echo. или var_dump. или еще print_r например есть. а вопрос в чем? Azn

проблема в том, что моё условие выборки даёт 2 объекта!
проблема в том, что нигрена не понятно Azn как оно может дать 1, если по вашему условию LIKE "%'.$value_phone.'%" 2 подходит - id=1 и id=2? а почему именно id=1? вы или в условие type="object" добавьте, или если я не угадал, то объясните нормально

P.S. кстати помимо INNER JOIN есть еще LEFT JOIN. и также есть еще GROUP BY. если с условием не угадал, то из этого что-нибудь обязательно поможет Azn
« Последнее редактирование: 06.08.2016, 23:11:44 от dmitry_stas » Записан
passer
Живу я здесь
******

Репутация: +69/-3
Offline Offline

Пол: Мужской
Сообщений: 829



« Ответ #2 : 07.08.2016, 00:50:25 »

Добавьте еще одно условие по type например.
Записан
john.deff
Осваиваюсь на форуме
***

Репутация: +0/-0
Offline Offline

Пол: Мужской
Сообщений: 112



« Ответ #3 : 07.08.2016, 02:56:38 »

вывод данных - это echo. или var_dump. или еще print_r например есть. а вопрос в чем? Azn
проблема в том, что нигрена не понятно Azn как оно может дать 1, если по вашему условию LIKE "%'.$value_phone.'%" 2 подходит - id=1 и id=2? а почему именно id=1? вы или в условие type="object" добавьте, или если я не угадал, то объясните нормально

P.S. кстати помимо INNER JOIN есть еще LEFT JOIN. и также есть еще GROUP BY. если с условием не угадал, то из этого что-нибудь обязательно поможет Azn

ну вопрос о правильном SQL запросе для получения нужного результата!
Если у нас есть два совпадения в таблице #__secret, то необходимо вывести один объект к которому они, эти совпадения принадлежат
Записан
dmitry_stas
Профи
********

Репутация: +798/-4
Offline Offline

Сообщений: 7784



« Ответ #4 : 07.08.2016, 11:19:51 »

ну вопрос о правильном SQL запросе для получения нужного результата!
я уже вам вроде нужные варианты написал.

Если у нас есть два совпадения в таблице #__secret, то необходимо вывести один объект к которому они, эти совпадения принадлежат
если при этом все равно, какая строка присоединится из #__secret, то используйте группировку (GROUP BY) по id из первой таблицы. если не все равно - добавляйте WHERE b.type=...
Записан
john.deff
Осваиваюсь на форуме
***

Репутация: +0/-0
Offline Offline

Пол: Мужской
Сообщений: 112



« Ответ #5 : 07.08.2016, 18:51:52 »

я уже вам вроде нужные варианты написал.
если при этом все равно, какая строка присоединится из #__secret, то используйте группировку (GROUP BY) по id из первой таблицы. если не все равно - добавляйте WHERE b.type=...

сделал
Код
$value_phone = "677";
$q->select(array('a.*', 'b.*'))
           ->from('#__objects AS a')
           ->join('INNER', '#__secret AS b ON (a.id = b.id_objects)')
           ->where('b.number LIKE "%'.$value_phone.'%"')
           ->group('b.id_objects'); // добавил группировку!
 

теперь работает как надо! Спасибо!
Записан
dmitry_stas
Профи
********

Репутация: +798/-4
Offline Offline

Сообщений: 7784



« Ответ #6 : 07.08.2016, 20:32:34 »

ну запрос по крайней мере похож на правильный. единственно что, если $value_phone у вас приходит извне, то так, как сейчас в запросе - это SQL injection. обратите на это внимание
Записан
john.deff
Осваиваюсь на форуме
***

Репутация: +0/-0
Offline Offline

Пол: Мужской
Сообщений: 112



« Ответ #7 : 08.08.2016, 00:09:18 »

ну запрос по крайней мере похож на правильный. единственно что, если $value_phone у вас приходит извне, то так, как сейчас в запросе - это SQL injection. обратите на это внимание

а как лучше сделать, без SQL injection?
Записан
dmitry_stas
Профи
********

Репутация: +798/-4
Offline Offline

Сообщений: 7784



« Ответ #8 : 08.08.2016, 00:54:08 »

а вы сами то как считаете, как лучше - с ней или без нее? вы понимаете что такое SQL injection? лучше да, без возможности SQL инъекции.
Записан
zomby6888
Живу я здесь
******

Репутация: +168/-3
Offline Offline

Пол: Мужской
Сообщений: 1538


« Ответ #9 : 08.08.2016, 01:57:34 »

Разработчикам расширений стоило бы для начала почитать как писать безопасные расширения:

https://cmscafe.ru/razrabotka/547-sozdaem-bezopasnye-rasshireniya-dlya-joomla
Записан
dmitry_stas
Профи
********

Репутация: +798/-4
Offline Offline

Сообщений: 7784



« Ответ #10 : 08.08.2016, 09:09:52 »

ну да, как то так... там даже с LIKE пример есть.
Записан
john.deff
Осваиваюсь на форуме
***

Репутация: +0/-0
Offline Offline

Пол: Мужской
Сообщений: 112



« Ответ #11 : 08.08.2016, 11:08:29 »

Разработчикам расширений стоило бы для начала почитать как писать безопасные расширения:

https://cmscafe.ru/razrabotka/547-sozdaem-bezopasnye-rasshireniya-dlya-joomla

спасибо, изучаю!
Записан
Страниц: [1]   Вверх
  Добавить закладку  |  Печать  
 
Перейти в:  

Powered by SMF 1.1.21 | SMF © 2006, Simple Machines

Joomlaforum.ru is not affiliated with or endorsed by the Joomla! Project or Open Source Matters.
The Joomla! name and logo is used under a limited license granted by Open Source Matters
the trademark holder in the United States and other countries.

LiveInternet