MySQL объединяет две таблицы только с частичным совпадением

Вот быстрый взлом. Я рекомендую этот плагин https://github.com/domoritz/leaflet-locatecontrol

var loadMap = function (id) {
    var HELSINKI = [60.1708, 24.9375];
    var map = L.map(id);
    var tile_url = 'http://{s}.tile.osm.org/{z}/{x}/{y}.png';
    var layer = L.tileLayer(tile_url, {
        attribution: 'OSM'
    });
    map.addLayer(layer);
    map.setView(HELSINKI, 19);

    map.locate({setView: true, watch: true}) /* This will return map so you can do chaining */
        .on('locationfound', function(e){
            var marker = L.marker([e.latitude, e.longitude]).bindPopup('Your are here :)');
            var circle = L.circle([e.latitude, e.longitude], e.accuracy/2, {
                weight: 1,
                color: 'blue',
                fillColor: '#cacaca',
                fillOpacity: 0.2
            });
            map.addLayer(marker);
            map.addLayer(circle);
        })
       .on('locationerror', function(e){
            console.log(e);
            alert("Location access denied.");
        });
};

loadMap('map');

0
задан Helios093 17 January 2019 в 16:55
поделиться

2 ответа

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

Вы можете сделать это несколькими способами. Идея в том, что вам нужны функции в предложении on. Например:

select . . . 
from addresstable a join
     namestable n
     on n.last_name = substring_index(owner_name, ',', 1);

Это предполагает, что фамилия в owner_name перед первой запятой.

0
ответ дан Gordon Linoff 17 January 2019 в 16:55
поделиться

Я рекомендую использовать REGEXP здесь:

SELECT at.*
FROM AddressTable at
INNER JOIN NamesTable nt
    ON at.Owner_Name REGEXP CONCAT('^', nt.Last_Name, ',');

Демо

Как упоминалось в предыдущих комментариях, указанная фамилия само по себе не может быть уникальным. Мы можем изменить приведенный выше запрос так, чтобы он также проверял имя, предполагая, что таблица имен также содержит это:

SELECT at.*
FROM AddressTable at
INNER JOIN NamesTable nt
    ON at.Owner_Name REGEXP CONCAT('^', nt.Last_Name, ',') AND
       at.Owner_Name REGEXP CONCAT(' ', nt.First_Name, ' 

Но даже у этого могут быть проблемы, потому что иногда люди имеют имя или фамилию, состоящую из два (или более) слова. Также возможна такая вещь, как отчество.

Для лучшего решения вы можете разбить имя, отчество и фамилию на отдельные столбцы, прежде чем переносить данные в базу данных.

);

Но даже у этого могут быть проблемы, потому что иногда люди имеют имя или фамилию, состоящую из два (или более) слова. Также возможна такая вещь, как отчество.

Для лучшего решения вы можете разбить имя, отчество и фамилию на отдельные столбцы, прежде чем переносить данные в базу данных.

0
ответ дан Tim Biegeleisen 17 January 2019 в 16:55
поделиться
Другие вопросы по тегам:

Похожие вопросы: