PHP . SU
Программирование на PHP, MySQL и другие веб-технологии
Без описания
Поиск в теме | Версия для печати
madlabel
Отправлено: 18 Сентября, 2015 - 14:22:38
Новичок
Покинул форум
Сообщений всего: 45
Дата рег-ции: Июль 2015
Помог: 0 раз(а)
Panoptik пишет: array_intersect ,
array_diff
только учтите что функции работают с одномерными массивами. так что как вы будете их преобразовывать на ваших плечах
И как же все таки их преобразовать в одномерный?
madlabel
Отправлено: 20 Сентября, 2015 - 01:00:40
Новичок
Покинул форум
Сообщений всего: 45
Дата рег-ции: Июль 2015
Помог: 0 раз(а)
PHP:
скопировать код в буфер обмена
$categories = SELECT id, description FROM table1;
$checkeds = SELECT id FROM table2;
foreach ( $categories AS $row ) {
$all_properties .= '<input type="checkbox" name="properties[]" value="' . $row [ 'id' ] . '" checked>' ;
} else {
$all_properties .= '<input type="checkbox" name="properties[]" value="' . $row [ 'id' ] . '">' ;
}
in_array(array('id' => $row['id']), $diff) - я так понимаю это сопли, как их убрать так и не понял, но - работает! Может у кого есть идеи? Или я что-то не доглядел.(Отредактировано автором: 20 Сентября, 2015 - 01:01:43)
Мелкий
Отправлено: 21 Сентября, 2015 - 14:45:25
Активный участник
Покинул форум
Сообщений всего: 11926
Дата рег-ции: Июль 2009
Откуда: Россия, Санкт-Петербург
Помог: 618 раз(а)
CODE (
SQL ):
скопировать код в буфер обмена
SELECT a. id, a. description, s. id IS NOT NULL AS is_selected
FROM table_all_options AS a
LEFT JOIN table_selected_options s ON a. id = s. id
madlabel
Отправлено: 30 Сентября, 2015 - 05:51:54
Новичок
Покинул форум
Сообщений всего: 45
Дата рег-ции: Июль 2015
Помог: 0 раз(а)
Мелкий пишет: CODE (
SQL ):
скопировать код в буфер обмена
SELECT a. id, a. description, s. id IS NOT NULL AS is_selected
FROM table_all_options AS a
LEFT JOIN table_selected_options s ON a. id = s. id
А как вывести отмеченные для определённой категории?CODE (
htmlphp ):
скопировать код в буфер обмена
foreach(/**/){
if($row[’is_selected'] && ($row['category_id'] == $_GET['id'])){
// пункт выбран
} else {
// пункт не выбран
}
}
Или можно запросом это сделать?
madlabel
Отправлено: 04 Октября, 2015 - 06:03:06
Новичок
Покинул форум
Сообщений всего: 45
Дата рег-ции: Июль 2015
Помог: 0 раз(а)
Мелкий пишет: Конечно можно и нужно запросом. Банальное условие в where
WHERE не подходит.
Суть вот в чем:
Категории:
Таблица: _categories : |id|description|
Атрибуты:
Таблица: _properties : |id|description|
Связь категории и атрибута:
Таблица:_categories_properties : |id|category_id|property_id|
Мне нужно вывести
флажки всех атрибутов для категории id которой равен $_GET['id'] при этом
отметить (checked) те, которые находятся в таблице связке .
Делаю так:
CODE (
SQL ):
скопировать код в буфер обмена
SELECT `c` . `category_id` ,
`p` . `id` ,
`p` . `description` ,
`c` . `property_id` IS NOT NULL AS is_checked
FROM `".PREFIX."_properties` AS p
LEFT JOIN `".PREFIX."_categories_properties` AS c ON `c` . `property_id` = `p` . `id`
ORDER BY `p` . `position` DESC
Далее разбираю:
CODE (
htmlphp ):
скопировать код в буфер обмена
foreach($rows AS $row){
if(($row['is_checked']) && $row['category_id'] == $_GET['id']){
// Отмечаю флажок
}
}
На выходе почему-то получаю повторяющиеся значения атрибутов . DISTINCT и GROUP by не помогают, как быть? Может я что-то не так делаю..
Мелкий
Отправлено: 04 Октября, 2015 - 09:52:59
Активный участник
Покинул форум
Сообщений всего: 11926
Дата рег-ции: Июль 2009
Откуда: Россия, Санкт-Петербург
Помог: 618 раз(а)
madlabel пишет: Мне нужно вывести флажки всех атрибутов для категории id которой равен $_GET['id'] при этом отметить (checked) те, которые находятся в таблице связке.
Вывести всё из properties, при этом пометить те строки, для которых в categories_properties есть связь с определённой категорией.
Верно?
CODE (
SQL ):
скопировать код в буфер обмена
SELECT `c` . `category_id` ,
`p` . `id` ,
`p` . `description` ,
`c` . `property_id` IS NOT NULL AS is_checked
FROM `".PREFIX."_properties` AS p
LEFT JOIN `".PREFIX."_categories_properties` AS c ON `c` . `property_id` = `p` . `id` AND c. category_id = ?
ORDER BY `p` . `position` DESC
madlabel пишет: Таблица:_categories_properties: |id|category_id|property_id|
Нафига поле id? Оно лишнее, category_id и property_id более чем достаточно и являются хорошим первичным ключом. Плюс индекс по property_id для обратного поиска.
madlabel
Отправлено: 05 Октября, 2015 - 18:21:01
Новичок
Покинул форум
Сообщений всего: 45
Дата рег-ции: Июль 2015
Помог: 0 раз(а)
Мелкий пишет: madlabel пишет: Мне нужно вывести флажки всех атрибутов для категории id которой равен $_GET['id'] при этом отметить (checked) те, которые находятся в таблице связке.
Вывести всё из properties, при этом пометить те строки, для которых в categories_properties есть связь с определённой категорией.
Верно?
CODE (
SQL ):
скопировать код в буфер обмена
SELECT `c` . `category_id` ,
`p` . `id` ,
`p` . `description` ,
`c` . `property_id` IS NOT NULL AS is_checked
FROM `".PREFIX."_properties` AS p
LEFT JOIN `".PREFIX."_categories_properties` AS c ON `c` . `property_id` = `p` . `id` AND c. category_id = ?
ORDER BY `p` . `position` DESC
madlabel пишет: Таблица:_categories_properties: |id|category_id|property_id|
Нафига поле id? Оно лишнее, category_id и property_id более чем достаточно и являются хорошим первичным ключом. Плюс индекс по property_id для обратного поиска.
Все верно, спасибо!!!
Поиск в теме | Версия для печати
Страниц (1): [1]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Вопросы новичков »
Все гости форума могут просматривать этот раздел. Только зарегистрированные пользователи могут создавать новые темы в этом разделе. Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
Powered by ExBB FM 1.0 RC1. InvisionExBB