Thread Verfasser: Rolly8-HL
Thread ID: 1003
Thread Info
Es gibt 11 Beiträge zu diesem Thema, und es wurde 5983 Mal angesehen.
 Thema drucken
DB_RATINGS System
Rolly8-HL
Hallo habe mal wieder eine Frage.
Habe das DB_RATINGS System umgeschrieben für mich, funktioniert auch wie es soll.
Habe jetzt ein "Neueste Bewertung" Panel, werden auch alle angaben angezeigt inc. Link zu dieser Infusion.

Beispiel: Jetzt habe ich ein Bild was bewertet werden kann, 20 User bewerten das selbe Bild und damit erhalte ich auch 20 Einträge zu dem selben Bild.

2. und 3. Bild natürlich das selbe auch hier werden alle Einträge angezeigt.

Ich möchte jetzt aber das nur ein Eintrag angezeigt wird von jedem Bild was bewertet wurde, eben so wie Artikel, News und co.

Einen Vergleich kann man da nur über rating_item_id und rating_type verwenden, wenn die jetzt Identisch sind soll dieses nur ein mal Angezeigt werden.

Code 

   $result = dbquery("   SELECT  c.*, a.*
      FROM ".DB_RATINGS." c
      LEFT JOIN ".DB_RATINGS_ADD." a ON c.rating_type=a.add_rating_type
      WHERE ".groupaccess('rating_access')." AND rating_hidden='1' $where_rating
      ORDER BY rating_datestamp DESC LIMIT 100
      ");

   while($data = dbarray($result)) {
   $rating = trimlink($data['rating_subject'], 23);
   echo "<a href='".BASEDIR.$data['add_rating_url']."?".$data['add_rating_page']."=".$data['rating_item_id']."#rating_100' title='".$data['add_rating_name']."' class='side'><i class='".$data['add_rating_icon']."' ></i> | ".$rating."</a><br />\n";
   }      



Hat da jemand eine Idee? oder einen Hinweis wo man etwas vergleichbares finden kann?

Ob es mit "foreach" klappen könnte weiß ich nicht da ich davon keine Ahnung habe.
Gruß Rolly8-HL
Was für Andere Wichtig ist muss für mich nicht genauso Wichtig sein!
Bin Dickkopf Unbelehrbar mache aus Protest nicht das was andere für Richtig halten!
Das gibt einem zu Denken oder?
 
SuNflOw
Hallo,

ich schlage vor:

Code 


SELECT * FROM (SELECT * FROM ".DB_RATINGS." ORDER BY id DESC) as x
GROUP BY rating_type, rating_item_id



Tabelle:

Code 

RatingTest
---
| rating_id | rating_type | rating_item_id |
| --------- | ----------- | -------------- |
| 1         |     I       |              1 |
| 2         |     I       |              1 |
| 3         |     I       |              1 |
| 4         |     I       |              2 |
| 5         |     I       |              2 |
| 6         |     I       |              2 |



Ergebnis:

Code 


RatingTest
---
| rating_id | rating_type | rating_item_id |
| --------- | ----------- | -------------- |
| 3         |     I       |              1 |
| 6         |     I       |              2 |



Dies gibt dir die letzte Bewertung für jedes bewertete Objekt aus.

P.S.: An die Seitenbetreiber, können wir eine MonoSpace Font für Code haben?
________________________________________________
I got my swim trunks and my Flippie-Floppies *-*
 
John Doe
Möchtest du eine bestimmte?
Dieses Mitglied wurde gelöscht!
 
Rolly8-HL
Zitat: Layzee schrieb:

Möchtest du eine bestimmte?


Nein muss ausgelesen werden kann keine festlegen ist Dynamisch.

@SuNflOw1991 soweit verstehe ich das in etwa aber wie genau muss ich das jetzt schreiben?
Gruß Rolly8-HL
Was für Andere Wichtig ist muss für mich nicht genauso Wichtig sein!
Bin Dickkopf Unbelehrbar mache aus Protest nicht das was andere für Richtig halten!
Das gibt einem zu Denken oder?
 
John Doe
Sorry, ich meinte jetzt Sun, wegen dem Monospace-Font Wink

Ich hab jetzt einfach mal Courier gesetzt, denke das langt so Smile
Dieses Mitglied wurde gelöscht!
 
Rolly8-HL
Erst ein mal besten Dank für die Idee als Ansatz, habe jetzt das gefunden, scheint zu klappen aber Sicher bin ich mir da noch nicht, muss es erst ein mal mit weiteren Einträgen aller Art testen.

Code 

   $result = dbquery("   SELECT  c.*, a.*
      FROM ".DB_RATINGS." c
      LEFT JOIN ".DB_RATINGS_ADD." a ON c.rating_type=a.add_rating_type
      WHERE ".groupaccess('rating_access')." AND rating_hidden='1' $where_rating
      GROUP BY c.rating_type , c.rating_item_id
      ORDER BY rating_datestamp DESC LIMIT 100
      ");



Nachtrag:

So weit geht es wohl, nur jetzt reagiert er nicht mehr richtig auf
Zitat: rating_datestamp DESC

wahrscheinlich jetzt nur noch auf
Zitat: GROUP BY c.rating_type , c.rating_item_id

Bearbeitet von Rolly8-HL am 04.07.2016 um 17:54
Gruß Rolly8-HL
Was für Andere Wichtig ist muss für mich nicht genauso Wichtig sein!
Bin Dickkopf Unbelehrbar mache aus Protest nicht das was andere für Richtig halten!
Das gibt einem zu Denken oder?
 
SuNflOw
Zitat: Layzee schrieb:

Sorry, ich meinte jetzt Sun, wegen dem Monospace-Font ;)

Ich hab jetzt einfach mal Courier gesetzt, denke das langt so :)


so wäre gut: "Consolas", "Courier New", Courier, monospace
Weil i.wie ist der Code immer noch nicht MonoSpaced. Wenn ich einen neuen Post verfasse habe ich Monospace, im Forum leider nicht.

https://en.wikipedia.org/wiki/Samples..._typefaces

Zusammengefügt am 04. Juli 2016 um 21:43:41:
Zitat: Rolly8-HL schrieb:

Erst ein mal besten Dank für die Idee als Ansatz, habe jetzt das gefunden, scheint zu klappen aber Sicher bin ich mir da noch nicht, muss es erst ein mal mit weiteren Einträgen aller Art testen.

Code 

   $result = dbquery("   SELECT  c.*, a.*
      FROM ".DB_RATINGS." c
      LEFT JOIN ".DB_RATINGS_ADD." a ON c.rating_type=a.add_rating_type
      WHERE ".groupaccess('rating_access')." AND rating_hidden='1' $where_rating
      GROUP BY c.rating_type , c.rating_item_id
      ORDER BY rating_datestamp DESC LIMIT 100
      ");



Nachtrag:

So weit geht es wohl, nur jetzt reagiert er nicht mehr richtig auf
Zitat: rating_datestamp DESC

wahrscheinlich jetzt nur noch auf
Zitat: GROUP BY c.rating_type , c.rating_item_id


Sortierung geht nur noch über Subquery. > ".DB_RATINGS." c < muss ersetzt werden mit:

Code 


(SELECT * FROM ".DB_RATINGS." ORDER BY rating_datestamp DESC) as c


________________________________________________
I got my swim trunks and my Flippie-Floppies *-*
 
Rolly8-HL
Leider habe ich das jetzt ganz und gar nicht verstanden, kannst Du mir das nicht mal als ganzen Code geben wie Du das meinst?
Gruß Rolly8-HL
Was für Andere Wichtig ist muss für mich nicht genauso Wichtig sein!
Bin Dickkopf Unbelehrbar mache aus Protest nicht das was andere für Richtig halten!
Das gibt einem zu Denken oder?
 
SuNflOw

Code 

 $result = dbquery("   SELECT  c.*, a.*
      FROM (SELECT * FROM ".DB_RATINGS." ORDER BY rating_datestamp DESC) as c
      LEFT JOIN ".DB_RATINGS_ADD." a ON c.rating_type=a.add_rating_type
      WHERE ".groupaccess('rating_access')." AND rating_hidden='1' $where_rating
      GROUP BY c.rating_type , c.rating_item_id
      ORDER BY rating_datestamp DESC LIMIT 100
      ");


________________________________________________
I got my swim trunks and my Flippie-Floppies *-*
 
Rolly8-HL
Jeep, so geht es, danke.

Habe in der zwischen zeit etwas anderes gefunden, geht auch, welches es von beiden ist da am Sichersten?

Code 

   $result = dbquery("   SELECT  c.*, a.*
      FROM ".DB_RATINGS." c
      LEFT JOIN ".DB_RATINGS_ADD." a ON c.rating_type=a.add_rating_type
      WHERE ".groupaccess('rating_access')." AND rating_hidden='1' $where_rating
      GROUP BY c.rating_type , c.rating_item_id
      ORDER BY MAX(rating_datestamp) DESC  LIMIT 100
      ");


Bearbeitet von Rolly8-HL am 05.07.2016 um 10:49
Gruß Rolly8-HL
Was für Andere Wichtig ist muss für mich nicht genauso Wichtig sein!
Bin Dickkopf Unbelehrbar mache aus Protest nicht das was andere für Richtig halten!
Das gibt einem zu Denken oder?
 
SuNflOw
Ich glaube die beiden Varianten geben sich beide nichts. Ich denke aber dass die SubQuery Methode schneller ist da der Max nicht erst ermittelt werden muss.

Aber schlaue Sache hier eine Aggregat Funktion zu nutzen :+1:
________________________________________________
I got my swim trunks and my Flippie-Floppies *-*
 
Springe ins Forum: