« Профессиональный Epson такой профессиональный | Получение и разбор RSS в PHP » |
Чуть-чуть про мускул в PHP.
Снова в порядке узелка, дабы потом не рыскать по исходникам и гуглам.
Подключение через PDO:
$db = new PDO ( 'mysql:host=localhost;dbname=database', 'user', 'pass' );
$db->setAttribute( PDO::ATTR_ERRMODE, PDO::ERRMODE_WARNING ); // При оттадке
$db->query ( 'SET character_set_connection = utf8;' );
$db->query ( 'SET character_set_client = utf8;' );
$db->query ( 'SET character_set_results = utf8;' );
Выборка с ограничением диапазона + сколько всего результатов без учета ограничения. Заодно и параметризированный запрос
$dbc = $db->prepare('SELECT SQL_CALC_FOUND_ROWS `id`, `name` FROM `heroes` WHERE `power`=? LIMIT 1,10');
$dbc->execute( array('flight') ); // Хочу летающих героев
$products = $dbc->fetchAll(PDO::FETCH_ASSOC); // В $products
список оных героев с учетом LIMIT $total_cnt = $db->query('SELECT FOUND_ROWS();')->fetchAll(PDO::FETCH_NUM); // В $total_cnt[0][0]
количество таких всего.
А да, аргументы для LIMIT нельзя параметризировать, т.к. значения будут обрарабываться на общих основаниях и есть все шансы получить там совсем не нужные кавычки. Причем результат различается в зависимости от версии PHP.
И еще несколько SQL-запросов.
Есть таблица со списком категорий/подкатегорий типа 'id/имя категории/id родителя'. Нужно выбрать категорию (имя) с id=5 и имя ее родителя.
SELECT
`id`, `name`,
`parent` as `p_id`, (SELECT `name` FROM `category` WHERE category.id=
p_id
) as `p_name` FROM `category` WHERE `id`=5 LIMIT 1
Дальше... Получим id любого товара из любой категории вложенной в родительскую. Родительской будет категория с id=1
SELECT `id` FROM `goods` WHERE `category` IN (SELECT `id` FROM category WHERE parent='1' GROUP BY `parent`) LIMIT 1
Или выбрать по одному товару из каждой категории вложенной в родительскую.
SELECT `id`, `name_en`, `category` FROM `goods` WHERE `category` IN (SELECT `id` FROM category WHERE parent="1") GROUP BY `category`
Как-то так...