Задать вопрос

Как правильно сформировать SQL запрос к БД?

Здравствуйте!
Может, вопрос очень простой... но я никак не додумаюсь как реализовать.
И так. Есть такая табличка в бд:
5c4c7870a14f6166844557.jpeg
Надо вытаскивать значение "relatedoptions_id", имея для запроса "product_id" и масив опций.
  • Вопрос задан
  • 89 просмотров
Подписаться 1 Средний Комментировать
Решения вопроса 2
kawabanga
@kawabanga
Да по разному можно. Вот к примеру, только учтите, если работает без PDO, то данные нужно вычищать, прежде чем сформировывать подобный запрос.

$product_id = 51;
$options = [
    13 => 49,
    14 => 53
];


$selectSql = 'select relatedoptions_id from tablename ';
$whereSql = 'where 1   ';
$whereSql .= ' and product_id=' . $product_id . '  ';

if ($options) {
    $whereSql .= 'and (0 ';
    foreach ($options as $key => $option) {
        $whereSql .= 'or (option_id=' . $key . ' and option_value_id='.$option.')';
    }
    $whereSql .= ')';
}

$sql = $selectSql.$whereSql;
echo $sql;
Ответ написан
@ABVKvadrat Автор вопроса
Благодаря подсказке Dmitry Bay появилось решение.
Может, кому-то пригодиться:

$sql = "SELECT relatedoptions_id, COUNT(relatedoptions_id) FROM abvv_relatedoptions_option 
	WHERE product_id = '" . (int)$product_id . "' ";
	if ($options) {
		$sql .= "AND (";
		$i=0;
		foreach ($options as $key => $option) {
			$i++; 
			if($i>1){
				$sql .= " OR ";
			}
			$sql .= " (option_id=" . $key . " AND option_value_id=".$option.")";
		}
		$sql .= ")";
		$c = count($options) - 1;
	}
$sql .= " GROUP BY relatedoptions_id HAVING COUNT(relatedoptions_id) = ". $c ." ";
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы