Königsklasse Inner joins :)
|
Catzenjaeger |
Geschrieben am 21. Mai 2016 20:04:28
|
|
Will meine latest figures panel noch bisschen pimpen und noch die Ratings der entsprechenden Figur einbauen. Die Joins sind schon so umfangreich das ich hier echt am knobbeln bin wie ich das mache. Momentan habe ich das nur über einen variable mache aber noch nicht steuern kann das eindeutig erkannt wird welche Figur zu welchen Ratin gehört
Bis jetzt habe ich wie erwähnt nur geschafft das ein Voting angezeigt wird ... aber bei der falschen Figur. Ich will natürlich zu jeder das entsprechend haben. Ich weiss allerdings nicht wie das zuteile weil ich ja hier kein so Kritierium wie "WHERE rating_item_id='".$data['figure_id']."' AND rating_type='B'"));" habe.
Hier mal der Panelcode
<?php
/***************************************************************************
* Cat Latest Figure Panel *
* *
* Copyright (C) 2016 Catzenjaeger *
* www.aliencollectors.com *
* *
* This program is free software; you can redistribute it and/or modify *
* it under the terms of the GNU General Public License as published by *
* the Free Software Foundation; either version 2 of the License, or *
* (at your option) any later version. *
***************************************************************************/
if(!defined('IN_FUSION')) {
die;
}
if(file_exists(INFUSIONS."cat_latest_figures_panel/locale/".$settings['locale'].".php"))
{
include(INFUSIONS."cat_latest_figures_panel/locale/".$settings['locale'].".php");
} else {
include(INFUSIONS."cat_latest_figures_panel/locale/German.php");
}
include INFUSIONS."figurelib/infusion_db.php";
$result = dbquery(
"SELECT tb.figure_id, tb.figure_image, tb.figure_pubdate, tb.figure_title, tb.figure_manufacturer, tb.figure_brand, tb.figure_datestamp, tb.figure_cat, tbc.figure_cat_id, tbc.figure_cat_access, tbu.user_id, tbu.user_name, tbu.user_status, tbu.user_avatar, tbm.figure_manufacturer_name, tbb.figure_brand_name, tbs.figure_scale_name FROM ".DB_PREFIX."figure_items tb
LEFT JOIN ".DB_USERS." tbu ON tb.figure_name=tbu.user_id
INNER JOIN ".DB_PREFIX."figure_cats tbc ON tb.figure_cat=tbc.figure_cat_id
INNER JOIN ".DB_PREFIX."figure_manufacturers tbm ON tbm.figure_manufacturer_id = tb.figure_manufacturer
INNER JOIN ".DB_PREFIX."figure_brands tbb ON tbb.figure_brand_id = tb.figure_brand
INNER JOIN ".DB_PREFIX."figure_scales tbs ON tbs.figure_scale_id = tb.figure_scale
".(iSUPERADMIN ? "" : "WHERE ".groupaccess('figure_cat_access'))." ORDER BY figure_datestamp DESC LIMIT 0,10");
opentable($locale['CLFP_000']);
if (dbrows($result) != 0) {
echo "<table cellpadding='0' cellspacing='0' width='100%'>";
echo "<colgroup><col width='8%'><col width='20%'><col width='20%'></colgroup><col width='2%'></colgroup><col width='10%'></colgroup><col width='10%'></colgroup><col width='10%'></colgroup>\n";
echo "<tr>";
echo "<td class='side-small'><strong>Image</strong></td>";
echo "<td class='side-small'><strong>".$locale['CLFP_002']."</strong></td>";
echo "<td class='side-small'><strong>".$locale['CLFP_003']."</strong></td>";
echo "<td class='side-small'><strong>".$locale['CLFP_004']."</strong></td>";
echo "<td class='side-small'><strong>".$locale['CLFP_005']."</strong></td>";
echo "<td class='side-small'><strong>".$locale['CLFP_006']."</strong></td>";
echo "<td class='side-small'><strong>".$locale['CLFP_010']."</strong></td>";
echo "</tr>";
while($data = dbarray($result)){
echo "<tr>";
if ($data['figure_image'] == "") {
echo "<td class='side-small'><a href='".INFUSIONS."figurelib/figure.php?figure_id=".$data['figure_id']."' class=''>\n<img src='".INFUSIONS."figurelib/images/default.png"."' alt='".trimlink($data['figure_title'],100)."' title='".trimlink($data['figure_title'],100)."' style='border:0px;max-height:40px;max-width:40px' /></td>";
} else {
echo "<td class='side-small'><a href='".INFUSIONS."figurelib/figure.php?figure_id=".$data['figure_id']."' class=''>\n<img src='".($data['figure_image'] ? IMAGES_FIGURE.$data['figure_image'] : INFUSIONS."figurelib/images/default.png")."' alt='".trimlink($data['figure_title'],100)."' title='".trimlink($data['figure_title'],100)."' style='border:0px;max-height:40px;max-width:40px' /></td>";
}
echo "<td class='side-small'><a href='".INFUSIONS."figurelib/figure.php?figure_id=".$data['figure_id']."'>".trimlink($data['figure_title'], 15)."</a></td>";
echo "<td class='side-small'>".trimlink($data['figure_manufacturer_name'],15)."</td>";
echo "<td>".trimlink($data['figure_brand_name'],15)."</td>";
echo "<td>".trimlink($data['figure_scale_name'],15)."</td>";
//WENN KEIN WERT IN DB DANN ZEIGE HINWEIS "NO DATA"
if ($data['figure_pubdate'] == "") {
echo "<td>".$locale['CLFP_008']."</td>";
} else {
echo "<td>".$data['figure_pubdate']."</td>";
}
}
echo "</td>";
$drating = dbarray(dbquery("SELECT SUM(rating_vote) sum_rating, COUNT(rating_item_id) count_votes FROM ".DB_RATINGS." WHERE rating_type='B'"));
$num_votes = $drating['count_votes'];
$rating = ($num_votes > 0 ? str_repeat("<img src='".INFUSIONS.$inf_folder."/images/star.png'>",ceil($drating['sum_rating']/$num_votes)) : "-");
$cell_color = ($i % 2 == 0 ? "tbl1" : "tbl2"); $i++;
echo "<td>".$rating."</td>";
echo "</tr>";
echo "</table>";
} else {
echo "<div style='text-align: center;'>".$locale['CLFP_001']."</div>";
}
closetable();
?>
-----------------------------------------------
Zusammengefügt am 24. Mai 2016 um 10:23:04:
habe frustriert aufgegeben.
habe es so probiert:
Datenbankabfrage/Inner join
Zitat $result = dbquery(
"SELECT tb.figure_id, tb.figure_image, tb.figure_pubdate, tb.figure_title, tb.figure_manufacturer, tb.figure_brand, tb.figure_datestamp, tb.figure_cat, tbc.figure_cat_id, tbc.figure_cat_access, tbu.user_id, tbu.user_name, tbu.user_status, tbu.user_avatar, tbm.figure_manufacturer_name, tbb.figure_brand_name, tbs.figure_scale_name, tbr.rating_votes FROM ".DB_PREFIX."figure_items tb
LEFT JOIN ".DB_USERS." tbu ON tb.figure_name=tbu.user_id
INNER JOIN ".DB_PREFIX."figure_cats tbc ON tb.figure_cat=tbc.figure_cat_id
INNER JOIN ".DB_PREFIX."figure_manufacturers tbm ON tbm.figure_manufacturer_id = tb.figure_manufacturer
INNER JOIN ".DB_PREFIX."figure_brands tbb ON tbb.figure_brand_id = tb.figure_brand
INNER JOIN ".DB_PREFIX."figure_scales tbs ON tbs.figure_scale_id = tb.figure_scale
INNER JOIN ".DB_RATINGS." tbr ON tbr.rating_item_id = tb.figure_id WHERE rating_type='B'
".(iSUPERADMIN ? "" : "WHERE ".groupaccess('figure_cat_access'))." ORDER BY figure_datestamp DESC LIMIT 0,5");
UND UNTEN DANN
Zitat $num_votes = $data['count_votes'];
$rating = ($num_votes > 0 ? str_repeat("<img src='".INFUSIONS.$inf_folder."/images/star.png'>",ceil($data['sum_rating']/$num_votes)) : "-");
echo "<td class='side-small'>".$rating."</td>";
------------------------
ich verzweifle bald ... ich bekomme nicht mal das Ergebniss der Spalte $data['rating_vote'] angezeigt.
Die DB Abfrage schein fast richtig weil es werden nur 2 figuren angezeigt .. nämlich die wo votings vorhanden sind. Ich benötige aber alle und nur das Votingsergebnis.
Zitat $result = dbquery(
"SELECT tb.figure_id, tb.figure_image, tb.figure_pubdate, tb.figure_title, tb.figure_manufacturer, tb.figure_brand, tb.figure_datestamp, tb.figure_cat, tbc.figure_cat_id, tbc.figure_cat_access, tbu.user_id, tbu.user_name, tbu.user_status, tbu.user_avatar, tbm.figure_manufacturer_name, tbb.figure_brand_name, tbs.figure_scale_name, tbr.rating_vote, tbr.rating_type, tbr.rating_item_id FROM ".DB_PREFIX."figure_items tb
LEFT JOIN ".DB_USERS." tbu ON tb.figure_name=tbu.user_id
INNER JOIN ".DB_PREFIX."figure_cats tbc ON tb.figure_cat=tbc.figure_cat_id
INNER JOIN ".DB_PREFIX."figure_manufacturers tbm ON tbm.figure_manufacturer_id = tb.figure_manufacturer
INNER JOIN ".DB_PREFIX."figure_brands tbb ON tbb.figure_brand_id = tb.figure_brand
INNER JOIN ".DB_PREFIX."figure_scales tbs ON tbs.figure_scale_id = tb.figure_scale
INNER JOIN ".DB_RATINGS." tbr ON tbr.rating_item_id = tb.figure_id AND tbr.rating_type='B'
".(iSUPERADMIN ? "" : "WHERE ".groupaccess('figure_cat_access'))." ORDER BY figure_datestamp DESC LIMIT 0,5");
Bearbeitet von Catzenjaeger am 24. Mai 2016 16:39:35
|
Information: |
PHP Version: Nicht ausgewählt • MySQL Version: Nicht ausgewählt • PHP-Fusion: Nicht ausgewählt |
|
|
|
David |
Geschrieben am 25. Mai 2016 06:40:59
|
|
Warum lässt du nicht innerhalb der While-Schleife die Voting Ergebnisse auslesen und zeigst diese an?
|
Information: |
PHP Version: Nicht ausgewählt • MySQL Version: Nicht ausgewählt • PHP-Fusion: Nicht ausgewählt |
|
|
|
Catzenjaeger |
Geschrieben am 25. Mai 2016 07:04:17
|
|
??? da es kommt ja nicht mal ein ergebnis zurück.. ich will einfach sofern ein voting zur figur vorhanden dieses erstmal angezeigt bekommen (das ist in der DB Ratings ja nur einen Zahl. Die muss dann entsprechend in Sterne umgerechnet werden
Ich habe es auch mit LEFT Join probiert .. ging auch nicht. Ich versteh halt nicht warum ich nicht mal ein wert bekommen. Ich sehe kein fehler mehr in der Abfrage |
Information: |
PHP Version: Nicht ausgewählt • MySQL Version: Nicht ausgewählt • PHP-Fusion: Nicht ausgewählt |
|
|
|
David |
Geschrieben am 25. Mai 2016 09:10:27
|
|
Wieso nicht einfach so?
<?php
/***************************************************************************
* Cat Latest Figure Panel *
* *
* Copyright (C) 2016 Catzenjaeger *
* www.aliencollectors.com *
* *
* This program is free software; you can redistribute it and/or modify *
* it under the terms of the GNU General Public License as published by *
* the Free Software Foundation; either version 2 of the License, or *
* (at your option) any later version. *
***************************************************************************/
if(!defined('IN_FUSION')) {
die;
}
if(file_exists(INFUSIONS."cat_latest_figures_panel/locale/".$settings['locale'].".php"))
{
include(INFUSIONS."cat_latest_figures_panel/locale/".$settings['locale'].".php");
} else {
include(INFUSIONS."cat_latest_figures_panel/locale/German.php");
}
include INFUSIONS."figurelib/infusion_db.php";
$result = dbquery(
"SELECT tb.figure_id, tb.figure_image, tb.figure_pubdate, tb.figure_title, tb.figure_manufacturer, tb.figure_brand, tb.figure_datestamp, tb.figure_cat, tbc.figure_cat_id, tbc.figure_cat_access, tbu.user_id, tbu.user_name, tbu.user_status, tbu.user_avatar, tbm.figure_manufacturer_name, tbb.figure_brand_name, tbs.figure_scale_name FROM ".DB_PREFIX."figure_items tb
LEFT JOIN ".DB_USERS." tbu ON tb.figure_name=tbu.user_id
INNER JOIN ".DB_PREFIX."figure_cats tbc ON tb.figure_cat=tbc.figure_cat_id
INNER JOIN ".DB_PREFIX."figure_manufacturers tbm ON tbm.figure_manufacturer_id = tb.figure_manufacturer
INNER JOIN ".DB_PREFIX."figure_brands tbb ON tbb.figure_brand_id = tb.figure_brand
INNER JOIN ".DB_PREFIX."figure_scales tbs ON tbs.figure_scale_id = tb.figure_scale
".(iSUPERADMIN ? "" : "WHERE ".groupaccess('figure_cat_access'))." ORDER BY figure_datestamp DESC LIMIT 0,10");
opentable($locale['CLFP_000']);
if (dbrows($result) != 0) {
echo "<table cellpadding='0' cellspacing='0' width='100%'>";
echo "<colgroup><col width='8%'><col width='20%'><col width='20%'></colgroup><col width='2%'></colgroup><col width='10%'></colgroup><col width='10%'></colgroup><col width='10%'></colgroup>\n";
echo "<tr>";
echo "<td class='side-small'><strong>Image</strong></td>";
echo "<td class='side-small'><strong>".$locale['CLFP_002']."</strong></td>";
echo "<td class='side-small'><strong>".$locale['CLFP_003']."</strong></td>";
echo "<td class='side-small'><strong>".$locale['CLFP_004']."</strong></td>";
echo "<td class='side-small'><strong>".$locale['CLFP_005']."</strong></td>";
echo "<td class='side-small'><strong>".$locale['CLFP_006']."</strong></td>";
echo "<td class='side-small'><strong>".$locale['CLFP_010']."</strong></td>";
echo "</tr>";
while($data = dbarray($result)){
echo "<tr>";
if ($data['figure_image'] == "") {
echo "<td class='side-small'><a href='".INFUSIONS."figurelib/figure.php?figure_id=".$data['figure_id']."' class=''>\n<img src='".INFUSIONS."figurelib/images/default.png"."' alt='".trimlink($data['figure_title'],100)."' title='".trimlink($data['figure_title'],100)."' style='border:0px;max-height:40px;max-width:40px' /></td>";
} else {
echo "<td class='side-small'><a href='".INFUSIONS."figurelib/figure.php?figure_id=".$data['figure_id']."' class=''>\n<img src='".($data['figure_image'] ? IMAGES_FIGURE.$data['figure_image'] : INFUSIONS."figurelib/images/default.png")."' alt='".trimlink($data['figure_title'],100)."' title='".trimlink($data['figure_title'],100)."' style='border:0px;max-height:40px;max-width:40px' /></td>";
}
echo "<td class='side-small'><a href='".INFUSIONS."figurelib/figure.php?figure_id=".$data['figure_id']."'>".trimlink($data['figure_title'], 15)."</a></td>";
echo "<td class='side-small'>".trimlink($data['figure_manufacturer_name'],15)."</td>";
echo "<td>".trimlink($data['figure_brand_name'],15)."</td>";
echo "<td>".trimlink($data['figure_scale_name'],15)."</td>";
// WENN KEIN WERT IN DB DANN ZEIGE HINWEIS "NO DATA"
if ($data['figure_pubdate'] == "") {
echo "<td>".$locale['CLFP_008']."</td>";
} else {
echo "<td>".$data['figure_pubdate']."</td>";
}
// Bewertung
$drating = dbarray(dbquery("SELECT SUM(rating_vote) sum_rating, COUNT(rating_item_id) count_votes FROM ".DB_RATINGS." WHERE rating_type='B' AND rating_item_id='".$data['figure_id']."'"));
$rating = ($drating['count_votes'] > 0 ? str_repeat("<img src='".INFUSIONS.$inf_folder."/images/star.png'>",ceil($drating['sum_rating']/$drating['count_votes'])) : "-");
echo "<td>".$rating."</td>";
echo "</tr>";
}
echo "</table>";
} else {
echo "<div style='text-align: center;'>".$locale['CLFP_001']."</div>";
}
closetable();
?>
Mache das selbst auch immer so ..
|
Information: |
PHP Version: Nicht ausgewählt • MySQL Version: Nicht ausgewählt • PHP-Fusion: Nicht ausgewählt |
|
|
|
Catzenjaeger |
Geschrieben am 25. Mai 2016 10:04:35
|
|
Geht leider nicht .. es werden gar keinen Figuren mehr angezeigt im Panel |
Information: |
PHP Version: Nicht ausgewählt • MySQL Version: Nicht ausgewählt • PHP-Fusion: Nicht ausgewählt |
|
|
|
David |
Geschrieben am 26. Mai 2016 06:26:23
|
|
Im Prinzip sollte dass eig garkeine Auswirkung darauf haben, da ich den Code nur in die While-Abfrage eingefügt habe. Würde mal sagen, deine Abfrage ist Fehlerhaft, hab die aus dem ersten Post genommen.
|
Information: |
PHP Version: Nicht ausgewählt • MySQL Version: Nicht ausgewählt • PHP-Fusion: Nicht ausgewählt |
|
|
|
Catzenjaeger |
Geschrieben am 26. Mai 2016 14:59:27
|
|
geht wieder danke .. vielen Dank
Bearbeitet von Catzenjaeger am 26. Mai 2016 15:32:50
|
Information: |
PHP Version: Nicht ausgewählt • MySQL Version: Nicht ausgewählt • PHP-Fusion: Nicht ausgewählt |
|
|