Не могу сделать запрос к mysql, который посчитает количество записей

113
14 декабря 2019, 02:10

Со связыванием таблиц не могу никак разобраться, сложно все для меня пока что. В общем делаю форум. Нужно банально вытащить из базы количество ответов в каждой теме. У меня выводится в каждой теме по 1 ответу. Но ведь в одной нет ответов. А все равно показывает единицу. Подскажите, что не так? Вот таблица с ответами

Вот таблица с темами

$query = "SELECT * FROM themes LEFT JOIN users ON themes.add_name = users.id LEFT JOIN section ON themes.section_id = section.id_section WHERE themes.section_id = '$_GET[item]'"; 
		$result = mysqli_query($link, $query) or die (mysqli_error($link)); 
		for ($data = []; $row = mysqli_fetch_assoc($result); $data[] = $row); 
		$content = ''; 
		foreach ($data as $elem) { 
			$id_theme = $elem['id_theme']; 
			$query1 = "SELECT COUNT(*) as count FROM answers LEFT JOIN themes ON answers.id_themes =    themes.id_theme WHERE answers.id_themes = themes.id_theme GROUP BY id_themes"; 
			$result1 = mysqli_query($link, $query1) or die (mysqli_error($link)); 
			for ($data1 = []; $row = mysqli_fetch_assoc($result1); $data1[] = $row); 
				foreach ($data1 as $elem1) { 
					$count = $elem1['count']; 
				} 
			var_dump($data1); 
 
			$content .= "<li class=\"rows_item\">"; 
				$content .= "<div class=\"rows_main_item_wrap\">"; 
				$content .=  "<div class=\"rows_main_item_left\"> 
									<a href=\"?theme=$id_theme\">$elem[head]</a> 
									<p>$elem[name]</p> 
							   </div>"; 
				$content .=     "<div class=\"rows_main_item_top\"> 
										<p><span>Ответов: $count</span></p> 
								</div>"; 
				$content .= 	"<div class=\"rows_main_item_right\"> 
										<p> <a class=\"message\" href=\"\"> $elem[message]</a> </p> 
										<p> от $elem[name] </p> 
								</div>"; 
				$content .= "</div>"; 
 
			$content .= "</li>"; 
		}

Answer 1

ВЫ формируете вот такой запрос:

SELECT COUNT(*) as count 
FROM answers 
LEFT JOIN themes ON answers.id_themes = themes.id_theme 
WHERE answers.id_themes = themes.id_theme 
GROUP BY id_themes

Однако этот запрос считает количество тем для каждого ответа. Весьма странная хотелка. Надо-то наоборот... кроме того, условие во WHERE (полностью дублирующее условие связывания) превращает LEFT JOIN в INNER, что вряд ли нужно.

Правильный запрос должен быть таким:

SELECT themes.id_theme, COUNT(answers.id_themes) as count 
FROM themes 
LEFT JOIN answers ON answers.id_themes = themes.id_theme 
GROUP BY themes.id_theme
READ ALSO
Поиск элемента с ценой больше 100

Поиск элемента с ценой больше 100

Как мне пропарсить элемент с ID=BETS и достать все числа из data-worth со всех элементов и если моё число больше добавить выше этого элемента мой элементесли...

130
Scale Image CSS, JS

Scale Image CSS, JS

Задача: Выполнить scale используя animate()

128
Как убрать хэш при навигации с owlCarousel?

Как убрать хэш при навигации с owlCarousel?

Код подключания var index_category_owl = $("#index-category-owl");

125