[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Запрос на вывод домов(с исключением)
web-monster
Есть к примеру такие данные в поле address:

ул. ленина 95 кв. 17
ул. ленина 98 кв. 64
ул. ленина 98 кв. 49
ул. ленина 15 кв. 87
ул. морозова 1 кв. 8
ул. ленина 8 кв. 17
ул. ленина 95 кв. 19
ул. ленина 98 кв. 9
ул. морозова 1 кв. 88

В итоге нужно чтобы при запросе(autocomplete) он выводил только один дом. то есть Ленина 95 или ленина 98 а то сейчас если вводить ленина 9 то он покажет 2 раза ленина 95 и три раза 98 а нужно чтобы один раз ленина 95 и один 98



Спустя 21 минута, 23 секунды (26.07.2010 - 20:37) waldicom написал(а):
Развести адрес по нескольким полям (правильно) или обрабатывать полученный массив до выдачи (гиморрно и неправильно).

Спустя 4 минуты, 9 секунд (26.07.2010 - 20:41) web-monster написал(а):
просто есть 10000 база, в которой есть адреса улиц и домов, а мне надо знать какой дом есть а какого нет, а когда я ввожу в поле где автозаверщение он мне выдаёт при запросе 50 лет 91, 5 значений 50 лет 91 с разными квартирами и 5 значений 93 с 5 кваритрами, стоит лимит 10, а там ещё есть 94,96 и.т.д то есть нужно сделать запрос который бы вывел именно один дом по маске: (то есть 50 лет 9 мне бы выдал: 50 лет 91,50 лет 93,50 лет 94, и.т.д)

Спустя 9 минут, 55 секунд (26.07.2010 - 20:51) sergeiss написал(а):
Тогда используй LIKE в запросе (более правильный варинат) либо выводи всё в ПХП и обрабатывай (менее правильный вариант).

Спустя 5 минут, 8 секунд (26.07.2010 - 20:56) web-monster написал(а):
SELECT * FROM users WHERE actual_address LIKE '%".$q."%' LIMIT 10
это выводит одинаковые дома, как до одного разделить, подзапросом?

Спустя 2 минуты, 31 секунда (26.07.2010 - 20:58) sergeiss написал(а):
А зачем там внутри кавычки? Или, по-другому, что у тебя содержится в переменной $q?

Спустя 4 минуты, 23 секунды (26.07.2010 - 21:03) web-monster написал(а):
if($_GET["type"]=="search")
{

$q = $_GET["term"];
$q = mysql_real_escape_string($q);
if(!$q) return;

$item = array();
$res = mysql_query("SELECT * FROM users WHERE actual_address LIKE '%".$q."%' LIMIT 10");

while($row = mysql_fetch_assoc($res))
{
$item[] = array("id"=>$row["id"],"label"=>$row["actual_address"], "value" =>$row["actual_address"]);
}


echo json_encode($item);
}


Вот Это даёт ответ json, в q содержиться к примеру ул.50 лет 9

Спустя 11 часов, 38 минут, 30 секунд (27.07.2010 - 08:41) web-monster написал(а):
и как сделать, кто нибудь знает? smile.gif

Спустя 4 минуты, 9 секунд (27.07.2010 - 08:46) linker написал(а):
Сначала выбрать все в массив, раз нужны только улицы, значит при формировании такого массива улиц вырезаем квартиры регуляркой, потом можно тупо вырезать повторяющиеся элементы массива array_unique();
Можно конечно и с запросом по-извращаться.

Спустя 11 минут, 40 секунд (27.07.2010 - 08:57) Семён написал(а):
Автор темы потрать время и прислушайся к совету waldicom, на мой взгляд самое лучшее решение!

Спустя 2 минуты, 32 секунды (27.07.2010 - 09:00) linker написал(а):
Пробуй
SELECT REPLACE(SUBSTRING(name, 1, LOCATE(' кв.', name)), 'ул. ', '') as Street FROM MyTable GROUP BY Street ASC

Спустя 3 часа, 20 минут, 33 секунды (27.07.2010 - 12:20) SlavaFr написал(а):
@linker твой SQL aбсoлютно корректный, но при 100000 адресов можно сразу идти на обеденый перерыв.
Речь идет не о месячном отчете, а о autocomplete, так что нужны мгновеные ответы от Базы и запросы на индексированные поля.
Лучше сразу облoмить человека и направить в правильном направлении, что @waldicom собственно и зделал.
Не будем даватъ web-monster надежду на решение которое обречено на гибель.
К стате участки твоего SQL-Кода web-monster может успешно использовать для создания новых индексированных полей в своей таблице.

Спустя 3 минуты, 38 секунд (27.07.2010 - 12:24) linker написал(а):
SlavaFr
Да оно понятно, что так никто не хранит данные в базе, точнее некорректная организация хранения данных. Я согласен, что пока не поздно нужно добавлять новые поля и разделять улицы от домов, квартир и прочее.
p.s. Я забыл LIKE в запросе, это несколько сократит время выполнения.

Спустя 11 минут, 2 секунды (27.07.2010 - 12:35) SlavaFr написал(а):
к стате в таблице может также не только ул. но и бул. пр. пер. стоять smile.gif

Спустя 7 минут, 1 секунда (27.07.2010 - 12:42) linker написал(а):
SlavaFr
Еще лучше, тогда появляется необходимость разделять и видеть пер. Ленина и ул. Ленина, а значит запрос сокращается
SELECT SUBSTRING(name, 1, LOCATE(' кв.', name)) as Street FROM MyTable WHERE name LIKE '%лени%'GROUP BY Street ASC
Понятно что еще есть корпуса, строения. Вообщем, по хорошему, надо переделывать табличку и весь соответствующий код.
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.