функция рекурсия(набор, результат) {
если набор пуст {
если результат уникален {
добавить результат в список уникальных
}
}
((цифра, количество), следующий_набор) = набор;
для i от 0 до количество {
рекурсия(следующий_набор, результат+(цифра i раз));
}
}
рекурсия(исходный_набор, '');
WHERE f1=xx AND f2=xx AND f3=xx
, WHERE f1=xx AND f2=xx
или WHERE f1=xx
. Если нужно ускорить поиск по другой части ключа (например WHERE f2=xx
, то надо строить отдельный индекс. SELECT * FROM geodata._cities WHERE `country_id` = 1 AND `region_id` IS NULL;
Получаем 230 строк с кучей ненужных вариантов.SELECT * FROM geodata._cities WHERE `country_id` = 1 AND `region_ru` IS NULL;
Получаем 39 строк с кучей ненужных вариантов.SELECT * FROM geodata._cities WHERE `country_id` = 1 AND `region_ru` IS NULL AND `region_id` IS NULL;
Получаем+-------------------------------+---------+------------------------------+
| title_ru | area_ru | title_ru |
+-------------------------------+---------+------------------------------+
| Москва | NULL | Москва |
| Девяткино, Ленинградская обл. | NULL | Девяткино,Ленинградская обл. |
| Санкт-Петербург | NULL | Санкт-Петербург |
+-------------------------------+---------+------------------------------+
<?php
echo '<table><tr><td>ид</td><td>имя</td></tr>';
foreach($data as $user)
echo "<tr><td>{$user['id']}</td><td>{$user['name'] }</td></tr>";
echo '</table>';
?>
<?php
$content = '';
foreach($data as $user)
if ($user[name] == 'Вася')
$content .= "<tr><td>{$user['id']}</td><td>{$user['name']}</td></tr>";
if ($content !== '')
echo "<table><tr><td>ид</td><td>имя</td></tr>{$content}</table>";
?>
unsigned char buf[1024];
read(f, buf, 1024);
unsigned long int *p = (unsigned long int *)(buf+*((unsigned long int *)(buf+2)));
unsigned long int *q = (unsigned long int *)(buf+*((unsigned long int *)(buf+10)));
for (p < q)
*(p++) = 0;