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 :: Выборка из базы mysql по точному значению из текста в столбце (текст-список через запятую)

 PHP.SU

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


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

> Описание: Выборка из базы mysql по точному значению, среди списка в ячейке столбца
Dich40000
Отправлено: 14 Января, 2020 - 02:13:30
Post Id


Новичок


Покинул форум
Сообщений всего: 5
Дата рег-ции: Июнь 2015  


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




Всем привет и хорошего настроения!

Столкнулся с простой задачей, но но не доходит до меня как лучше это реализовать.
Задача такова.

Нужно обратиться к базе mysql и найти строки в которых в столбце city содержится город "city2" из перечисленных через запятую городов в ячейке.

Имею ввиду запрос типа SELECT * from table1 WHERE city="city2"

Строки выглядят таки образом:
table1
id----city------------------------------------------region
0-----city1,city2,city3,city4,city5----------------region1
1-----city6,city7,city2,city8,city9----------------region2
2-----city10,city11,city12,city13,city14---------region3

В первой и второй сроке есть этот город city2, а в 3й нет. Нужно получить строки в которых он есть Радость

Использовать mysql запрос или же поместить всю базу в массив и воспользоваться поиском по массиву?
Какой вариант лучше и как его реализовать? Или же ваш вариант. Рассмотрю любые Ха-ха
Спасибо!
 
 Top
Мелкий Супермодератор
Отправлено: 14 Января, 2020 - 09:47:12
Post Id



Активный участник


Покинул форум
Сообщений всего: 11926
Дата рег-ции: Июль 2009  
Откуда: Россия, Санкт-Петербург


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




Dich40000 пишет:
перечисленных через запятую городов в ячейке

Приведите в нормальную форму.
Решили данные хранить непойми как - вот и получаете проблемы в элементарных местах.


-----
PostgreSQL DBA
 
 Top
Dich40000
Отправлено: 14 Января, 2020 - 20:32:58
Post Id


Новичок


Покинул форум
Сообщений всего: 5
Дата рег-ции: Июнь 2015  


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




Мелкий пишет:
Dich40000 пишет:
перечисленных через запятую городов в ячейке

Приведите в нормальную форму.
Решили данные хранить непойми как - вот и получаете проблемы в элементарных местах.


Вы предлагаете хранить данные с помощью реляционных таблиц?
 
 Top
Мелкий Супермодератор
Отправлено: 14 Января, 2020 - 23:44:05
Post Id



Активный участник


Покинул форум
Сообщений всего: 11926
Дата рег-ции: Июль 2009  
Откуда: Россия, Санкт-Петербург


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




Я предлагаю привести в нормальную форму. Это вполне определённый технический термин, если что.


-----
PostgreSQL DBA
 
 Top
Vladimir Kheifets
Отправлено: 15 Января, 2020 - 16:14:31
Post Id



Частый посетитель


Покинул форум
Сообщений всего: 879
Дата рег-ции: Март 2017  
Откуда: Германия, Бавария


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




Мелкий пишет:
Я предлагаю привести в нормальную форму. Это вполне определённый технический термин, если что.
Добрый день!
В жизни бывает много странного...
Например, когда навигатионные программы отправляют запросы на поиск гео. координат по названию пункта,
информация на гео. сервере выбирается из таблицы 'geoname'
Может кому пригодится http://download[dot]geonames[dot]org/export/dump/

Цитата:
The main 'geoname' table has the following fields :
-------------------------------- -------------------
geonameid : integer id of record in geonames database
name : name of geographical point (utf8) varchar(200)
asciiname : name of geographical point in plain ascii characters, varchar(200)
alternatenames : alternatenames, comma separated, ascii names automatically transliterated, convenience attribute from alternatename table, varchar(10000)
latitude : latitude in decimal degrees (wgs84)
longitude : longitude in decimal degrees (wgs84)
feature class : see http://www.geonames.org/export/codes.html, char(1)
feature code : see http://www.geonames.org/export/codes.html, varchar(10)
country code : ISO-3166 2-letter country code, 2 characters
cc2 : alternate country codes, comma separated, ISO-3166 2-letter country code, 200 characters
admin1 code : fipscode (subject to change to iso code), see exceptions below, see file admin1Codes.txt for display names of this code; varchar(20)
admin2 code : code for the second administrative division, a county in the US, see file admin2Codes.txt; varchar(80)
admin3 code : code for third level administrative division, varchar(20)
admin4 code : code for fourth level administrative division, varchar(20)
population : bigint (8 byte int)
elevation : in meters, integer
dem : digital elevation model, srtm3 or gtopo30, average elevation of 3''x3'' (ca 90mx90m) or 30''x30'' (ca 900mx900m) area in meters, integer. srtm processed by cgiar/ciat.
timezone : the iana timezone id (see file timeZone.txt) varchar(40)
modification date : date of last modification in yyyy-MM-dd format


например
field geonameid:
6255148

field alternatenames:
Avrupa,Chau Au,Châu Âu,Eiropa,El viejo continente,Eropa,Eurohpa,Eurohpá,Euroopa,Eurooppa,Europa,Europe,Europo,Európa,Evropa,Evrópa,Ewrop,Ewropa,Eŭropo,Rashka,...

field cc2: (iso2 коды стран)
AD,AL,AT,AX,BA,BE,BG,BY,CH,CZ,DE,DK,EE,ES,FI,FO,FR,GB,GG,GI,GR,HR,HU,IE,IM,IS,IT,JE,LI,LT,LU,LV,MC,MD,ME,MK,MT,NL,NO,PL,PT,RO,RS,RU,SE,SI,SJ,SK,SM,UA,VA
Прикреплено изображение (Нажмите для увеличения)
Anmerkung 2020-01-15 151745.png

(Отредактировано автором: 15 Января, 2020 - 16:18:39)

 
 Top
Мелкий Супермодератор
Отправлено: 15 Января, 2020 - 16:38:03
Post Id



Активный участник


Покинул форум
Сообщений всего: 11926
Дата рег-ции: Июль 2009  
Откуда: Россия, Санкт-Петербург


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




Vladimir Kheifets, это вполне резонный вариант для экспорта данных в TSV формате.
Но не для поиска. То что у вас источник данных в таком виде не оправдание для лютых костылей в своей системе.


-----
PostgreSQL DBA
 
 Top
Vladimir Kheifets
Отправлено: 15 Января, 2020 - 17:06:25
Post Id



Частый посетитель


Покинул форум
Сообщений всего: 879
Дата рег-ции: Март 2017  
Откуда: Германия, Бавария


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




Dich40000 пишет:
Всем привет и хорошего настроения!

Столкнулся с простой задачей, но но не доходит до меня как лучше это реализовать.
Задача такова.

Нужно обратиться к базе mysql и найти строки в которых в столбце city содержится город "city2" из перечисленных через запятую городов в ячейке.

Имею ввиду запрос типа SELECT * from table1 WHERE city="city2"

Строки выглядят таки образом:
table1
id----city------------------------------------------region
0-----city1,city2,city3,city4,city5----------------region1
1-----city6,city7,city2,city8,city9----------------region2
2-----city10,city11,city12,city13,city14---------region3

В первой и второй сроке есть этот город city2, а в 3й нет. Нужно получить строки в которых он есть Радость

Использовать mysql запрос или же поместить всю базу в массив и воспользоваться поиском по массиву?
Какой вариант лучше и как его реализовать? Или же ваш вариант. Рассмотрю любые Ха-ха
Спасибо!


Добрый день!
например, так.
Есть таблица 'geoname' в ней поле
alternatenames: alternatenames, comma separated
запрос:
CODE (SQL):
скопировать код в буфер обмена
  1. SELECT `geonameid`,`alternatenames` FROM `GeoNames` WHERE `alternatenames` REGEXP '^berlin,|,berlin,|,berlin$|^berlin$'  

Спойлер (Отобразить)
Обратите внимание то, что названия могут быть одинаковые, а города разные, поэтому необходимо в запросе указывать и код страны или региона. Удачи!
(Добавление)
Мелкий пишет:
Vladimir Kheifets, это вполне резонный вариант для экспорта данных в TSV формате.
Но не для поиска. То что у вас источник данных в таком виде не оправдание для лютых костылей в своей системе.

(Отредактировано автором: 15 Января, 2020 - 17:24:47)

 
 Top
LIME
Отправлено: 16 Января, 2020 - 06:02:36
Post Id


Активный участник


Покинул форум
Сообщений всего: 10732
Дата рег-ции: Нояб. 2010  


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




Vladimir Kheifets пишет:
WHERE `alternatenames` REGEXP
и забыли про индексы
Костыли имеют свойство размножаться. Один рожает еще несколько и фича превращается в ад со временем. Чем раньше рефакторинг произойдет, тем лучше.
 
 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