php-resource



Zurück   PHP-Scripte PHP-Tutorials PHP-Jobs und vieles mehr > Entwicklung > SQL / Datenbanken
 

Login

 
eingeloggt bleiben
star Jetzt registrieren   star Passwort vergessen
 

 

 


SQL / Datenbanken Probleme mit SQL? Hier könnt ihr eure Fragen zu SQL (MySQL, PostgreSQL, MS-SQL und andere ANSI-SQL Server) los werden.

Antwort
 
LinkBack Themen-Optionen Thema bewerten
  #1 (permalink)  
Alt 05-03-2010, 17:33
chrissi11
 Registrierter Benutzer
Links : Onlinestatus : chrissi11 ist offline
Registriert seit: Jan 2008
Beiträge: 70
chrissi11 ist zur Zeit noch ein unbeschriebenes Blatt
Standard multi selects

hi..

ich versuche 3 select hintereinander abzufragen.
das klappt so leider wie gewünscht nicht wie ich es mir vorstelle.
2 selects gehen problemlos.
folgendes.
bastel gerad daran mir ein kleines forum zu bauen.

bei meiner sql abfrage ist das so, das ich themen zu jener kategorie sowohl als auch die beiträge gezählt auslesen will.
alles bis hin zum zähler für die themen klappt.
aber dem zeitpunkt wo ich auslese wieviel beiträge es dann sind, scheitert es indem er mir jedes mal den gleichen wert zu weißt, obwohl in einer von drei kategorien nur die themen sind. die anzahl ließt er korrekt aus. nur weißt er jedes mal den anderen kategorien den gleichen wert zu.
das ganze ist mal wieder smartygerecht..

so sieht sie aus:

PHP-Code:

$forum 
$tdDB->getAll('select id,catid,titlecat,subtitlecat, 
                       
(select count(refid) from ! where refid=refid) as beitraege,
                                                    (select count(forumcat) from ! where forumcat=catid) as forum from ! '

                        
array( 
FORUM_THEMA_TABLE,FORUM_THEMA_TABLE,FORUM_TABLE ) );

$t->assign('forum'$forum); 
und das steht im .tpl was aber eigendlich unwichtig sein dürfte...
habs mich hier nur auf die ausgaben beschränkt statt den restlichn html code

HTML-Code:
{foreach item=item key=key from=$forum}
titel: {$item.titlecat}
subtitel: {$item.subtitlecat}
anzahl themen: {$item.forum}

anzahl beiträge {$item.beitraege}
{/foreach}
So, nun das hier steht in der db.

3 kategorien (cat)

cat 1 = 1 thema + 2 beiträge
cat 2 = 0 themen
cat 3 = 0 themen

folgende ausgabe findet statt:

cat 1 = 1 thema beiträge:2
cat 2 = 0 themen beiträge:2
cat 3 = 0 themen beiträge:2

hoffentlich ist das so verständlich genug geschrieben..

ich komme jedenfalls so nicht weiter.
woran liegt das, das er den gezählten wert bei jedem schleifendurchgang
auf genau den gleichen wert setzt. macht er ja schließlich beim zählen der themen auch nicht..

vielen danke schonmal

Geändert von chrissi11 (05-03-2010 um 20:01 Uhr)
Mit Zitat antworten
  #2 (permalink)  
Alt 05-03-2010, 17:39
Kropff
  Administrator
Links : Onlinestatus : Kropff ist offline
Registriert seit: Mar 2002
Ort: Köln
Beiträge: 11.722
Kropff befindet sich auf einem aufstrebenden Ast
Standard

Was ergibt denn ein print_r($forum);? Vielleicht ist ja die Abfrage falsch.

Peter
__________________
Nukular, das Wort ist N-u-k-u-l-a-r (Homer Simpson)
Meine Seite
Mit Zitat antworten
  #3 (permalink)  
Alt 05-03-2010, 17:50
chrissi11
 Registrierter Benutzer
Links : Onlinestatus : chrissi11 ist offline
Registriert seit: Jan 2008
Beiträge: 70
chrissi11 ist zur Zeit noch ein unbeschriebenes Blatt
Standard

hi, das kommt dabei raus:

Code:
Array ( 
[0] => Array ( 
[id] => 1 
[catid] => 1 
[titlecat] => testkategorie 
[subtitlecat] => das ist die kategorie zum testen 
[beitraege] => 2 
[forum] => 1 ) 
[1] => 



Array ( 
[id] => 2 
[catid] => 2 
[titlecat] => autos 
[subtitlecat] => alles rund um autos 
[beitraege] => 2 
[forum] => 0 ) 

[2] => 

Array ( [id] => 3 

[catid] => 3 
[titlecat] => spiele 
[subtitlecat] => neueste spiele online usw 
[beitraege] => 2 
[forum] => 0 ) )
er sagt immer beiträge 2..und das ist falsch

edit: forum ist der wert für die anzahl der themen..

Geändert von chrissi11 (05-03-2010 um 17:52 Uhr)
Mit Zitat antworten
  #4 (permalink)  
Alt 05-03-2010, 17:59
Kropff
  Administrator
Links : Onlinestatus : Kropff ist offline
Registriert seit: Mar 2002
Ort: Köln
Beiträge: 11.722
Kropff befindet sich auf einem aufstrebenden Ast
Standard

Gib mal den Query zum Beispiel in PHPMyAdmin ein und schau, was dabei herauskommt. Und was macht die Methode getAll?

Peter
__________________
Nukular, das Wort ist N-u-k-u-l-a-r (Homer Simpson)
Meine Seite
Mit Zitat antworten
  #5 (permalink)  
Alt 05-03-2010, 18:16
chrissi11
 Registrierter Benutzer
Links : Onlinestatus : chrissi11 ist offline
Registriert seit: Jan 2008
Beiträge: 70
chrissi11 ist zur Zeit noch ein unbeschriebenes Blatt
Standard

so, der befehl in mysql

SELECT id, catid, titlecat, subtitlecat, (

SELECT count( refid )
FROM `chat_forum_thema`
WHERE refid = refid
) AS beitraege, (

SELECT count( forumcat )
FROM `chat_forum_thema`
WHERE forumcat = catid
) AS forum
FROM `chat_forum`
LIMIT 0 , 30

folgendes ergebnis:

id catid titlecat beitraege forum
1 1 testkategorie 2 1
2 2 autos 2 0
3 3 spiele 2 0

ich hab mal übersichtshalber subtitles rausgenommen..
ergebnis ist so nicht richtig.
in meinem script muss wad falsch sein..nur was mach ich da falsch *denk

die methode:
getAll bestimmt das alle werte nutzbar sind.
getOne in meinen fall bestimmt nur einen wert.

Geändert von chrissi11 (05-03-2010 um 18:22 Uhr)
Mit Zitat antworten
  #6 (permalink)  
Alt 05-03-2010, 18:22
Kropff
  Administrator
Links : Onlinestatus : Kropff ist offline
Registriert seit: Mar 2002
Ort: Köln
Beiträge: 11.722
Kropff befindet sich auf einem aufstrebenden Ast
Standard

Code:
SELECT count( refid )
FROM `chat_forum_thema`
WHERE refid = refid
Ist Tinnef. Schau dir mal das Thema SELF JOIN an und erstelle eine vernünftige Beziehung. Und dafür brauchst du nicht mal Subselects. Außerdem sollest du dich mit Normalisierung beschäftigen, dann umgehst du solche Probleme.

Peter

PS. Da dies mittlerweile ein reines SQL-Problem ist, verschieb ich das mal ins richtige Forum.
__________________
Nukular, das Wort ist N-u-k-u-l-a-r (Homer Simpson)
Meine Seite
Mit Zitat antworten
  #7 (permalink)  
Alt 05-03-2010, 18:27
chrissi11
 Registrierter Benutzer
Links : Onlinestatus : chrissi11 ist offline
Registriert seit: Jan 2008
Beiträge: 70
chrissi11 ist zur Zeit noch ein unbeschriebenes Blatt
Standard

oha, das soll einer verstehen..wie kompliziert ist das denn? gibts da keinen besseren weg?

edit: naja, danke erstmal..werd ich mir das wohl oder über mal über mich gehen lassen *krampf

hi nochmal..ich versteh das prinzip von JOIN noch nicht so ganz. Naja.eigentlich garnicht... kann mir da jemand behilflich sein das ganze zu verstehn?
So wie ich das nun gelesen habe gibt es mehrere joins..und ich geh davon aus das der inner join der ist, den ich brauche für meine abfrage.

jetzt lese ich, das beim inner join "die zweite tabelle" mit an die erste verknüpft wird..aber die bedinung hab ich noch nicht durchblickt..und wie das im script nun aussehen muss ehrlich gesagt auch nicht..ich blicks nicht..

hoffe es hilft mir jemand..danke schonmal

Geändert von AmicaNoctis (07-03-2010 um 12:19 Uhr) Grund: Doppelpost
Mit Zitat antworten
  #8 (permalink)  
Alt 07-03-2010, 12:45
AmicaNoctis
  Moderatorin
Links : Onlinestatus : AmicaNoctis ist offline
Registriert seit: Jul 2009
Beiträge: 5.709
Blog-Einträge: 9
AmicaNoctis sorgt für eine eindrucksvolle AtmosphäreAmicaNoctis sorgt für eine eindrucksvolle Atmosphäre
Standard

Da musst du aber schon etwas konkreter werden. Ganz allgemein: Ein Join ist das, was passiert, wenn du jedes Element einer Menge mit jedem einer anderen Menge kombinierst (Kreuzprodukt). Die on-Klausel legt dabei Einschränkungen für diese Kombinationen fest.

Beispiel: Du verkaufst Feuerzeuge, Taschenrechner und Kerzen. Das ist die erste Menge, die Menge an Dingen. Die zweite Menge besteht aus den Farben Rot, Grün und Blau. Wenn du das jetzt kombinierst, hast du 3 Dinge in je 3 verschiedenen Farben, also 9 verschiedene Produkte. Das wäre ein Cross Join. Wenn du aber keine blauen Kerzen anbieten kannst, musst du zusätzliche Bedingungen festlegen, was man mit einer on-Klausel machen könnte.

Üblicherweise joint man in einer normalisierten DB nur über Primär- und Fremdschlüsselspalten. Das erkläre ich dir aber nicht, das liest du dir z. B. bei Wikipedia unter "Normalisierung" durch.

Es gibt doch so viele Beispiele im Web, sogar hier im Forum. Wenn du dir die erstmal ansehen würdest und die dabei verwendeten Tabellen als Testtabellen bei dir anlegst, hast du doch eine erstklassige Spielwiese, um damit herumzuprobieren.

Von einem Forum kannst du keinen persönlichen Lehrgang erwarten. Das was ich dir jetzt erklärt habe, hättest du auch schon selbst über Google in Erfahrung bringen können.
__________________
Hast du die Grundlagen zur Fehlersuche gelesen? Hast du Code-Tags benutzt?
Hast du als URL oder Domain-Beispiele example.com, example.net oder example.org benutzt?
Super, danke!
Mit Zitat antworten
  #9 (permalink)  
Alt 09-03-2010, 18:38
chrissi11
 Registrierter Benutzer
Links : Onlinestatus : chrissi11 ist offline
Registriert seit: Jan 2008
Beiträge: 70
chrissi11 ist zur Zeit noch ein unbeschriebenes Blatt
Standard

hi nochmal.. okay..hab mich nun echt lange damit beschäftigt darüber zu lesen und auszuprobieren. bin noch nicht auf den richtigen trichter gekommen, bis ich diese seite entdeckt habe.

MySQL: Daten bearbeiten - HTMLWorld

jetzt kann ich schonmal anhand meinem beispiel verstehen wie das
funktioniert. also das zählen auf diese weise hab ich ja nun hinbekommen.
meine datenbank hab ich dementsprechend auch noch angepasst.

folgendes.. mit diesem sql befehl bekomme ich mein richtiges resultat.

select count(*) from chat_forum_kategorien , chat_forum_themen
where chat_forum_themen.cat = chat_forum_kategorien.kcatid

das problem: ich brauche leider noch viel mehr informationen.
zum einen brauch ich die werte aus der kategorie, dann die gezählten themen jener kategorie und die gezählten beiträge dieser kategorie.

weiterhin hab ich probiert in dieser abfrage weitere selects einzufügen.
aber da fängt dann sql an zu mäckern. vor allem, ich zähle ja praktisch jeden einzelnen eintrag damit, was ich aber eigentlich garnich haben will.
sondern nur 2 zähler und die restlichen werte die ich zum ausgeben brauche.

so siehts erstmal in meiner datenbank aus: 3 tabellen..

kategorien:

-id
-titlecat
-subtitlecat
-kcatid

id und kcatid sind hier immer identisch.

themen:
-id
-ttitle
-date
-cat
-autor

beitraege:
-id
-autor
-text
-bdate
-top (die thema id sozusagen)
-catid



damit zähle ich die themen aus jener kategorie.
aber ich komm mit dem rest immernoch nicht klar
Mit Zitat antworten
  #10 (permalink)  
Alt 09-03-2010, 21:32
Kropff
  Administrator
Links : Onlinestatus : Kropff ist offline
Registriert seit: Mar 2002
Ort: Köln
Beiträge: 11.722
Kropff befindet sich auf einem aufstrebenden Ast
Standard

Zitat:
zum einen brauch ich die werte aus der kategorie
Wenn du die benötigst, ist mit count Essig. Das funktioniert nicht. Die einfachste Lösung wäre, alle benötigten Daten zu ziehen und dann per PHP mit count zu arbeiten. Aber sicher haben unseren SQL-Experten dafür eine bessere Lösung. Ich habe leider seit über zwei Jahren mit komplexen SQL-Abfragen nichts mehr tun und bin da ein wenig aus dem Thema.

Peter

PS: Dafür muss ich mich um jeden größeren JavaScript-Mist kümmern.
__________________
Nukular, das Wort ist N-u-k-u-l-a-r (Homer Simpson)
Meine Seite
Mit Zitat antworten
  #11 (permalink)  
Alt 09-03-2010, 21:55
chrissi11
 Registrierter Benutzer
Links : Onlinestatus : chrissi11 ist offline
Registriert seit: Jan 2008
Beiträge: 70
chrissi11 ist zur Zeit noch ein unbeschriebenes Blatt
Standard

hi, ja eben drum das ist ja das blöde..
mit count habe ich erstmals jetzt versucht das eine ergebnis zu zählen..
das klappt sofern auch.. ein zähler fehlt mir dementsprechend noch.

ich könnte zwar die einzelnen elemente zählen lassen,was auch nicht das problem wäre, aber wie füg ich diese ergebnisse dann wieder so ein, das ich sie für smarty brauchbar mache?

da ich ja mit ner foreach schleife im template die ausgaben mache und nicht mit php....na dann hoff ich mal, das sich jemand findet der mir da weiter helfen kann..

danke dir erstmal kroppf und amica für die aufgebrachte mühe
Mit Zitat antworten
  #12 (permalink)  
Alt 11-03-2010, 14:53
chrissi11
 Registrierter Benutzer
Links : Onlinestatus : chrissi11 ist offline
Registriert seit: Jan 2008
Beiträge: 70
chrissi11 ist zur Zeit noch ein unbeschriebenes Blatt
Standard

hi nochmal..ich hab eine lösung gefunden.. naja, sagen wir ich hatte die ganze zeit meine abfrage falsch gestaltet.
das mit den subselects klappt an sich ganz gut.

vielleicht gibts dafür eine elegantere lösung. ich weiß nicht.
aber so funktioniert es zumindest bei mir erstmal.
wie es nun mit der performance aussieht, weiß ich auch nicht.
ich rufe ja eigentlich immer nur einen wert ab.
muss das aber halt für jeden wert den ich haben will einmal machen :/

so schauts dann aus..

PHP-Code:

'select id,titlecat,subtitlecat,                            
                            
(select autor from ! where catid = kcatid  order by bdate desc limit 1 ) as lastautor,    
                            
(select autorname from ! where catid = kcatid order by bdate desc limit 1) as autorname,
                            
(select ttitel from ! where catid = kcatid order by bdate desc limit 1) as lastbeitrag,

(select top from ! where catid = kcatid order by bdate desc limit 1) as gotopic,
                            
(select count(cat) from ! where cat = kcatid) as at,            
(select count(top) from ! where catid = kcatid ) as ab from ! '

array( 
 
FORUM_BEITRAEGE_TABLE,FORUM_BEITRAEGE_TABLE,
FORUM_BEITRAEGE_TABLE,FORUM_BEITRAEGE_TABLE,
FORUM_THEMEN_TABLE,FORUM_BEITRAEGE_TABLE,
FORUM_KATEGORIEN_TABLE  ) ); 
wer wsa damit anfangen kann, bittesehr
viele grüße

Geändert von chrissi11 (11-03-2010 um 14:57 Uhr)
Mit Zitat antworten
Antwort

Lesezeichen


Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
 

Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
2 Selects = Fehler? Onyxagargaryll PHP Developer Forum 9 25-04-2008 10:12
Aufbau 2er SELECTS JS tine_ HTML, JavaScript, AJAX, jQuery, CSS, Bootstrap, LESS 7 20-04-2005 10:47
Selects zusammenfassen reaVen SQL / Datenbanken 2 02-12-2004 11:48
Multible Selects flo221 HTML, JavaScript, AJAX, jQuery, CSS, Bootstrap, LESS 3 22-07-2004 13:00
Selects verschachteln bei MySQL? funzel SQL / Datenbanken 15 24-01-2003 15:25

Themen-Optionen
Thema bewerten
Thema bewerten:

Forumregeln
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are an


PHP News

ebiz-trader 7.5.0 mit PHP7 Unterstützung veröffentlicht
ebiz-trader 7.5.0 mit PHP7 Unterstützung veröffentlichtDie bekannte Marktplatzsoftware ebiz-trader ist in der Version 7.5.0 veröffentlicht worden.

28.05.2018 | Berni

Wissensbestand in Unternehmen
Wissensbestand in UnternehmenLebenslanges Lernen und Weiterbilden sichert Wissensbestand in Unternehmen

25.05.2018 | Berni


 

Aktuelle PHP Scripte

PHP Server Monitor

PHP Server Monitor ist ein Skript, das prüft, ob Ihre Websites und Server betriebsbereit sind.

11.09.2018 Berni | Kategorie: PHP/ Security
PHP WEB STATISTIK ansehen PHP WEB STATISTIK

Die PHP Web Statistik bietet Ihnen ein einfach zu konfigurierendes Script zur Aufzeichnung und grafischen und textuellen Auswertung der Besuchern Ihrer Webseite. Folgende zeitlichen Module sind verfügbar: Jahr, Monat, Tag, Wochentag, Stunde Folgende son

28.08.2018 phpwebstat | Kategorie: PHP/ Counter
Affilinator - Affilinet XML Produktlisten Skript

Die Affilinator Affilinet XML Edition ist ein vollautomatisches Skript zum einlesen und darstellen der Affili.net (Partnerprogramm Netzwerk) Produktlisten und Produktdaten. Im Grunde gibt der Webmaster seine Affilinet PartnerID ein und hat dann unmittelb

27.08.2018 freefrank@ | Kategorie: PHP/ Partnerprogramme
 Alle PHP Scripte anzeigen

Alle Zeitangaben in WEZ +2. Es ist jetzt 13:13 Uhr.