AsviS
@AsviS
начинающий

Как правильно сделать выборку из БД?

Здравствуйте!
что я делаю не так??
у меня есть следующий код:

$nav=new navig("SELECT * FROM `viiii`");
$q=$db->query('SELECT * FROM `viiii` ORDER BY `id` LIMIT '.$nav->start.','.$nav->nstr);
while($n=$q->fetch_assoc()){

$type_ed = explode(",", $n['type']);
foreach ($type_ed as $type_edd)
{
        $ttt = $db->query("SELECT * FROM `type` WHERE `id`='".$type_edd."'")->fetch_assoc();
        $name_type = $ttt['type'];
        $type_edit.= "$name_type,";
        break;
}
$threat_type = substr($type_edit, 0, -1);
?>    
	<tr>
		<td><?=$n['added_date'];?></td>
		<td><?=$n['title'];?></td>
		<td><?=$threat_type;?></td>
	</tr><!-- Table Row -->
<?php
}
echo '</table>';
$nav->panel();

в таблице viiii следующая структура:
ID|DATE|TITLE|TYPE_id
1|2017-04-02|Ask.com|2
2|2017-04-02|AllIn1Convert|2
3|2017-04-02|APlusGamer|2
4|2017-04-02|AudiotoAudio|2
5|2017-04-02|qwerty|2,5,6
type_id в таблице через запятую
структура таблицы type:
ID|TYPE
5|Next
2|Toolbar
6|Emdt
и т.д.

в итоге на странице получаю следующее:
6697facb10b545eb9be287b0418ae82d.jpg

а должно выйти так:
2017-04-02 Ask.com Toolbar
2017-04-02 AllIn1Convert Toolbar
2017-04-02 APlusGamer Toolbar
2017-04-02 AudiotoAudio Toolbar
2017-04-02 qwerty Toolbar,Next,Emdt
и т.д.
Помогите пожалуйста!
  • Вопрос задан
  • 160 просмотров
Решения вопроса 2
@LeSDav
Веб-разработчик
1. Во втором цикле надо предварительно обнулять переменную $type_edit.
2. В этом же втором цикле непонятно зачем в конце стоит break. В результате в переменную $type_edit попадает только значение "Toolbar", поскольку оно первым выгружается из базы, а потом цикл сбрасывается.
Ответ написан
Ninazu
@Ninazu
<?php

#region DB Connection

$dbName = "test";
$dbHost = "127.0.0.1";
$dbUser = "root";
$dbPassword = "";
$dbCharset = 'UTF8';
$connection = new PDO("mysql:host={$dbHost};dbname={$dbName};charset={$dbCharset}", $dbUser, $dbPassword);

#endregion

#region Pagination

$limit = empty($_GET['limit']) ? 10 : ((int)$_GET['limit']);
$offset = empty($_GET['page']) ? 0 : (($_GET['page'] - 1) * $limit);

#endregion

#region GetTypes

$query = "	SELECT
				`id`,
				`type`
			FROM `type`";
$result = $connection
	->query($query)
	->fetchAll(PDO::FETCH_ASSOC);
$types = array_combine(array_column($result, 'id'), array_column($result, 'type'));

#endregion

#region GetVIIII

$query = "	SELECT
				`id`,
				`added_date`,
				`title`,
				`type`
			FROM `viiii` 
			ORDER BY `id`
			LIMIT {$offset},{$limit}";

$result = $connection
	->query($query)
	->fetchAll(PDO::FETCH_ASSOC);

#region Render

$output = "<table>";

foreach ($result as $row){
	$typeList = explode(',',$row['type']);
	$typeList = array_intersect_key($types, array_flip($typeList));
	$threatType = implode(", ", $typeList);
	$output.="	<tr>
					<td>{$row['added_date']}</td>
					<td>{$row['title']}</td>
					<td>{$threatType}</td>
				</tr>";
}

$output.= "</table>";

echo $output;

#endregion


Но я бы рекоммендовал вам хранить тип в смежной таблице. В будущем будет меньше проблемм.
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы