[MySQL] 2 Abfragen zusammenführen

jannicars

Erfahrenes Mitglied
Könnte man die Abfrage in der Schleife nicht noch irgendwie geschickt in die 1. Abfrage mit reinpacken?
Und könnte man nicht überhaupt dann da den PHP Teil weglassen?
Der PHP Teil könnte zur Not auch da bleiben.
Währe nur besser wenn die 2. Abfrage in der 1. mit drin ist,
da sonst pro Kategorie immer eine extra Abfrage läuft.
PHP:
<?php
$sql = 'SELECT categories.id AS categories_id, categories.name AS categories_name, user.id AS user_id, user.name AS user_name, user.sort_order AS user_sort_order, user.visible AS user_visible
        FROM ' . MEMBERS_CATEGORIES_TABLE . ' categories
        INNER JOIN ' . MEMBERS_USER_TABLE . ' user
        ON categories.id = user.categories_id
        ORDER BY categories.sort_order ASC, user.sort_order ASC';
$result = $db->sql_query($sql);
$catid = 0;
while ($row = $db->sql_fetchrow($result)) {
    // categories
    $categories_id = $row["categories_id"];
    $categories_name = $row["categories_name"];
    // users
    $user_id = $row["user_id"];
    $user_name = $row["user_name"];
    $user_sort_order = $row["user_sort_order"];
    $user_visible = $row["user_visible"];
    if ($categories_id != $catid) {
        $new_category = true;
        $catid = $categories_id;
        $sql_count = 'SELECT COUNT(id) AS counts
			     FROM ' . MEMBERS_USER_TABLE . '
			     WHERE categories_id=' . $categories_id;
        $result_count = $db->sql_query($sql_count);
        $records = (int) $db->sql_fetchfield('counts');
        $db->sql_freeresult($result_count);
    } else {
        $new_category = false;
        $sort_order_buttons = "normal_line";
    }
    if ($records == 1) {
        $sort_order_buttons = "only_one_line";
    } else if ($records == $user_sort_order) {
        $sort_order_buttons = "last_line";
    } else if ($user_sort_order == 1) {
        $sort_order_buttons = "first_line";
    }
}
$db->sql_freeresult($result);
?>
 
Item: Wo wertest du die Variablen der Schleife aus?

Item: Du kannst den Count als Subquery anhängen

SQL:
SELECT 
	categories.id AS categories_id, 
	categories.name AS categories_name, 
	user.id AS user_id, 
	user.name AS user_name, 
	user.sort_order AS user_sort_order, 
	user.visible AS user_visible,
	item_counts.counts AS categories_items_count
FROM 
	MEMBERS_CATEGORIES_TABLE categories
	INNER JOIN MEMBERS_USER_TABLE user
		ON categories.id = user.categories_id
	INNER JOIN (
			SELECT
			categories_id,
			COUNT(id) AS counts
		FROM 
			MEMBERS_USER_TABLE
		GROUP BY
			categories_id			
		) item_counts
		ON categories.id = item_counts.categories_id
ORDER BY
	categories.sort_order ASC,
	user.sort_order ASC
 
Zuletzt bearbeitet von einem Moderator:

Neue Beiträge

Zurück