Архив

Публикации с меткой ‘mysql’

Задача: нужно выбрать строки, в которых поле начинается с выбранной буквы, не учитывая определенный набор символов в его начале — ИП, ООО и т.д.
Т.е. фильтр по алфавиту, но наименования указаны как ИП Тест или в другом любом формате.
Например, при поиске результатов, начинающихся с С должен найти ООО РЦ «Северо-Запад»
Набор неучитываемых символов задается пользователем, указывается через разделитель |:

$setting_replace='ИП|ООО|ТД|РЦ|"|«';
$part_sql='`name`';
$replaces=explode('|',$setting_replace);
foreach($replaces as $item){
	$part_sql="REPLACE(".$part_sql.",'".$item."','')";
}
$where.=" AND TRIM(".$part_sql.") LIKE '".$_GET['let']."%'";//TRIM - удаляем образовавшиеся пробелы, в нашем случае в начале

В результате поиска строк, у которых наименование начинается с «С» требуемая часть sql-запроса будет иметь вид:

 AND TRIM(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(`name`,'ИП',''),'ООО',''),'ТД',''),'РЦ',''),'"',''),'«','')) LIKE 'С%'
Categories: MySQL, PHP Tags: ,
30 марта 2016 Нет комментариев

В примере нужно сделать выборку не учитывая нули в начале строки в БД.
Т.е. обозначена строка 11, но в БД может храниться значение 0011 или 011 или 11 или 00011 и т.д.

SELECT * FROM `modifications` WHERE TRIM(LEADING '0' FROM `part`)='11';

http://www.mysql.ru/docs/man/String_functions.html

Categories: MySQL Tags:
19 февраля 2016 Нет комментариев
SELECT MIN(CAST(`power` AS SIGNED)) FROM `modifications` WHERE `shown`=1 and `power`!='';
Categories: MySQL Tags:
17 февраля 2016 Нет комментариев
SELECT * FROM `redirect` ORDER BY CHAR_LENGTH(rfrom) DESC

В результате сортировка произойдет по количеству символов в rfrom от наибольшего

Categories: MySQL Tags:
9 февраля 2016 Нет комментариев
CREATE TEMPORARY TABLE IF NOT EXISTS temp_table(`uid` int(10)) ENGINE=MEMORY;
TRUNCATE TABLE temp_table;
INSERT INTO `temp_table` (SELECT MIN(uid) as uid FROM `base` GROUP BY `organization`);
DELETE FROM `base` WHERE `uid` NOT IN (SELECT `uid` FROM `temp_table`);
ALTER IGNORE TABLE base ADD UNIQUE KEY(organization);
Categories: MySQL Tags:
27 января 2016 Нет комментариев

В примере нужно сортировать позиции каталога по наименованию, но вначале товары в наличии — остаток которых больше 0.

SELECT * FROM `catalog` WHERE `hide`='0' ORDER BY IF(`ost`,TRUE,FALSE) DESC, `name` ASC;

upd:
замечено что позиции с остатком меньше 0 все равно попадают в начало списка.
Другой вариант:

SELECT * FROM `catalog` WHERE `hide`='0' ORDER BY `ost`>0 DESC, `name` ASC;
Categories: MySQL Tags:
21 декабря 2015 Нет комментариев

Необходимо во where сделать выборку по varchar как по int.

В примере в таблице sizes — поле name — varchar, нужно выбрать все строки в которых наименование размера больше 140.
При обычной выборке в результат попадет также, к примеру, 50, т.к. сортировка будет по алфавиту.

Чтобы сделать выборку как для числовых данных используем:

SELECT * FROM sizes WHERE CAST(name AS SIGNED)>='140';
Categories: MySQL Tags: