WN

WN (https://www.wn.se/forum/index.php)
-   Serversidans teknologier (https://www.wn.se/forum/forumdisplay.php?f=4)
-   -   Avancerad SQL-fråga (https://www.wn.se/forum/showthread.php?t=1057534)

lubic 2013-04-17 11:18

Hänger inte riktigt med på vilket resultat du vill ha ut i din senaste fråga. Alltså vilka kolumner och data vill du få fram?

Hur ska du använda resultatet? Ska du visa en lista på medlemmar med total power, samt alla items de har? Om det inte är för många medlemmar som ska visas per sida så är det nog enklare/bättre att lösa detta i php-koden med flera querys. Antingen en med alla medlemmar och deras total power och sedan en per medlem för att hämta upp deras items till den medlemmen eller en för alla medlemmarna och en för alla items för dessa medlemmar och sedan php-logik för att sätta ihop resultaten.

Alternativt kan du titta på group_concat, om du bara behöver en textsträng med items dvs.

Då kan också så klart joina ihop member data med total power och items med en subquery för att få ut allt i samma fråga.

Conny Westh 2013-04-17 23:03

Så här skulle du konna lägga in get_crew_power() som en SP:

Kod:

DELIMITER $$

CREATE PROCEDURE `get_crew_power`(in param_crew_id int)
BEGIN
        SELECT SUM(t.totPower) AS total_crew_power
        FROM crew_members cm
        JOIN members m ON m.member_id = cm.user_id
        JOIN
          (SELECT m.member_id,
                          (SUM(i.item_stat) + MAX(m.member_attack) + MAX(m.member_defence)) AS totPower
          FROM members m
          JOIN memberitems mi ON m.member_id = mi.memberitems_member
          JOIN items i ON i.item_id = mi.memberitems_item
          GROUP BY m.member_id)t ON t.member_id = m.member_id
        WHERE cm.crew_id = param_crew_id
        GROUP BY cm.crew_id  ;

END$$

För att anropa SPn från PHP MED felhantering skriver du så här:

Kod:

if (!$db->query("CALL get_crew_power(" . crew_id . ")"))
{
    echo "CALL failed: (" . $db->errno . ") " . $db->error;
}


För att anropa SPn från PHP UTAN felhantering skriver du så här:

Kod:

$db->query("CALL get_crew_power(" . crew_id . ")")


Alla tider är GMT +2. Klockan är nu 02:04.

Programvara från: vBulletin® Version 3.8.2
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Svensk översättning av: Anders Pettersson