0

これが私が4つの異なるテーブルからmysqlの結果をフェッチするために使用している私のコードです

SELECT DISTINCT c.title as CourseTitle, t.title as TopicTitle, l.title as LessonTitle,    r.title as ResourceTitle, r.location, r.type, r.duration
FROM j17_lessons l, j17_topics t, j17_courses c, j17_resources r
WHERE
CONCAT(c.title, t.title, l.title, r.title, r.type, r.location) LIKE '%Fatih%'
AND c.id = t.course_id
AND l.topic_id = t.id
AND r.lesson_id = l.id
ORDER BY c.title, t.id, l.id, r.id;

これが私のフェッチ結果のスクリーンショットです http://i40.tinypic.com/2v1w0ib.png

ここで必要なのは、データベース内の「CourseTitle」ごとにHTMLテーブルを作成することです。

SQLステートメントとPHPコードを使用すると、最初のクエリの結果を取得できますが、テーブルを分割するために2番目のクエリが必要です'CourseTitle'

/* connect to the db */
$connection = mysql_connect('localhost','root','123');
mysql_select_db('alhudapk',$connection);

/* show tables */
$result = mysql_query('SELECT DISTINCT c.title as CourseTitle, t.title as TopicTitle,     l.title as LessonTitle, r.title as ResourceTitle, r.location, r.type, r.duration
FROM j17_lessons l, j17_topics t, j17_courses c, j17_resources r
WHERE
CONCAT(c.title, t.title, l.title, r.title, r.type, r.location) LIKE '%Taleem%'
AND c.id = t.course_id
AND l.topic_id = t.id
AND r.lesson_id = l.id
ORDER BY c.title, t.id, l.id, r.id',$connection) or die('cannot show tables');
while($tableName = mysql_fetch_row($result)) {

$table = $tableName[0];

echo '<h3>',$table,'</h3>';
$result2 = mysql_query('SELECT '.$table . 'AS' .$table);
if(mysql_num_rows($result2)) {

正しくてより良いコードを作成するために私を導いてください

4

2 に答える 2

1

私がすることは、データベースの結果を大きな配列構造に配置し、データを印刷するのと同じ順序で配置することです。これにより、コードの保守が少し簡単になります。

// run the query as you did in the question

$courses = array();

// use mysql_fetch_assoc as it makes the code clearer
while($row = mysql_fetch_assoc($result)) {
    $ct = $row['CourseTitle'];
    // Found a new Course Title? If so create an array to put the data rows in
    if(!isset($courses[$ct]))
        $courses[$ct] = array();

    // add this row to the end of its course array
    $courses[$ct][] = $row;
}

// now print the results out
foreach($courses as $title =>$course) {
    echo "<h3>$title</h3>";
    echo "<table>";
    foreach($course as $line) {
        echo "<tr><td>" . $line['TopicTitle'] . "</td><td>" 
             . $line['LessonTitle'] . "</td></tr>";
    echo "</table>";
}

上記のコードは最初の2列のみを出力していますが、それを機能させることができれば、残りの列を非常に簡単に追加できるはずです。

于 2012-04-04T18:49:38.227 に答える
0

追加:

GROUP BY c.title

SQLステートメントの最後まで。

于 2012-04-04T18:20:34.563 に答える