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

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

1. Dich40000 - 14 Января, 2020 - 02:13:30 - перейти к сообщению
Всем привет и хорошего настроения!

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

Нужно обратиться к базе 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 запрос или же поместить всю базу в массив и воспользоваться поиском по массиву?
Какой вариант лучше и как его реализовать? Или же ваш вариант. Рассмотрю любые Ха-ха
Спасибо!
2. Мелкий - 14 Января, 2020 - 09:47:12 - перейти к сообщению
Dich40000 пишет:
перечисленных через запятую городов в ячейке

Приведите в нормальную форму.
Решили данные хранить непойми как - вот и получаете проблемы в элементарных местах.
3. Dich40000 - 14 Января, 2020 - 20:32:58 - перейти к сообщению
Мелкий пишет:
Dich40000 пишет:
перечисленных через запятую городов в ячейке

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


Вы предлагаете хранить данные с помощью реляционных таблиц?
4. Мелкий - 14 Января, 2020 - 23:44:05 - перейти к сообщению
Я предлагаю привести в нормальную форму. Это вполне определённый технический термин, если что.
5. Vladimir Kheifets - 15 Января, 2020 - 16:14:31 - перейти к сообщению
Мелкий пишет:
Я предлагаю привести в нормальную форму. Это вполне определённый технический термин, если что.
Добрый день!
В жизни бывает много странного...
Например, когда навигатионные программы отправляют запросы на поиск гео. координат по названию пункта,
информация на гео. сервере выбирается из таблицы '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
6. Мелкий - 15 Января, 2020 - 16:38:03 - перейти к сообщению
Vladimir Kheifets, это вполне резонный вариант для экспорта данных в TSV формате.
Но не для поиска. То что у вас источник данных в таком виде не оправдание для лютых костылей в своей системе.
7. Vladimir Kheifets - 15 Января, 2020 - 17:06:25 - перейти к сообщению
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 формате.
Но не для поиска. То что у вас источник данных в таком виде не оправдание для лютых костылей в своей системе.
8. LIME - 16 Января, 2020 - 06:02:36 - перейти к сообщению
Vladimir Kheifets пишет:
WHERE `alternatenames` REGEXP
и забыли про индексы
Костыли имеют свойство размножаться. Один рожает еще несколько и фича превращается в ад со временем. Чем раньше рефакторинг произойдет, тем лучше.

 

Powered by ExBB FM 1.0 RC1