php.de

Zurück   php.de > Webentwicklung > Datenbanken

Datenbanken SQL und Co

Antwort
 
LinkBack Themen-Optionen Thema bewerten
Alt 06.03.2006, 16:51  
Benutzer
 
Registriert seit: 25.10.2004
Beiträge: 43
bratwurstschorsch
Standard Hunderte Select Abfragen zusammenfassen

Mein php Code sieht bisher so aus:

PHP-Code:
<?php
$ANZGES 
count($arr_words);
for (
$i 0$i $ANZGES$i++) {
        
$sqlString "SELECT id from $table_keywords where keyword='".$arr_words[$i]."' limit 1";
        
$Ergebnis mysql_db_query($Quelle_update$sqlString$Server_update);
        if (!
$Ergebnis) {
                echo 
"
Datenbankfehler: $sqlString"
;
        }
        else {
                
$anzahl mysql_num_rows($Ergebnis);
                if (
$anzahl) {
                        
$keywordid[] = mysql_result($Ergebnis0'id');
                }
        }
        
        
//keyword noch nicht in der keywordtabelle eingetragen
        
if(!isset($keywordid)) {
                
$sqlString "INSERT INTO $table_keywords (keyword)
                VALUES ('"
.$arr_words[$i]."') ";
                
$Ergebnis mysql_db_query($Quelle_update$sqlString$Server_update);
                if (!
$Ergebnis) {
                        echo 
"
Datenbankfehler: $sqlString"
;
                }
                else {
                        echo 
$arr_words[$i]." eingetragen
"
;
                }
                
                
$sqlString "SELECT id from $table_keywords where keyword='".$arr_words[$i]."' limit 1";
                
$Ergebnis mysql_db_query($Quelle_update$sqlString$Server_update);
                if (!
$Ergebnis) {
                        echo 
"
Datenbankfehler: $sqlString"
;
                        
//return "Datenbankfehler: $sqlString";
                
}
                else {    
// Daten auslesen
                        
$anzahl mysql_num_rows($Ergebnis);
                        if (
$anzahl) {
                                
$keywordid[] = mysql_result($Ergebnis0'id');
                        }
                }
        }
}
?>
Ich habe eine Tabelle mit Keywords. Nun habe ich eine Liste von Wörtern, die in meiner Suchmaschine "Indexiert" werden sollen.
Dazu benötige ich die "Keywordid" des Keywords in der Keyword-Tabelle. Dies mache ich nun mit vielen Select-Abfragen. Irgendwie ist es doch
bestimmt möglich alle diese Select-Abfragen in eine Abfrage zusammenzufassen. Das Problem ist nur, wenn ein Keyword nicht in der
Keywordtabelle enthalten ist, muss es erst per Insert reingeschrieben werden, um dann anschliesend eine Select abfrage zu machen um die
keywordid heraus zu bekommen.
Weiss leider nicht wie ich die Abfragen zusammenfassen soll, da es schon
mal 500.000 Abfragen bei einem Durchgang werden können
bratwurstschorsch ist offline   Mit Zitat antworten
Sponsor Mitteilung
PHP Code Flüsterer

Registriert seit: 21.08.2005
Beiträge: 4682
PHP-Kenntnisse:
Fortgeschritten

Alt 06.03.2006, 17:48  
Erfahrener Benutzer
 
Registriert seit: 21.12.2004
Beiträge: 5.232
PHP-Kenntnisse:
Fortgeschritten
mepeisen ist ein wunderbarer Anblickmepeisen ist ein wunderbarer Anblickmepeisen ist ein wunderbarer Anblickmepeisen ist ein wunderbarer Anblickmepeisen ist ein wunderbarer Anblickmepeisen ist ein wunderbarer Anblickmepeisen ist ein wunderbarer Anblick
mepeisen eine Nachricht über ICQ schicken mepeisen eine Nachricht über Skype™ schicken
Standard

Hmmm. Da fallen mir Speziallösungen zur Volltextsuche ein, egal.

Zunächst ist dein Zauberwort JOIN, um mehrere Selects zusammenzufassen. Das ganze ist aber nicht i8n Kürze erklärt, daher würde ich raten ein entsprechendes SQL-Tutorial gezielt zum Thema "JOIN" zu durchforsten.

Ansonsten kannst du nach einem insert (ich gehe von aus, dass die id auto_increment ist) mittels eines Befehls die eingefügte ID rauskriegen: http://www.php.net/mysql_insert_id
__________________
www.php-maven.org PHP und Maven vereint: Build/Deploy/Produktion/Konfiguration, Projekt Management, CI, PHPUnit, zahlreiche Frameworks
Twitter @ https://twitter.com/#!/mepeisen und Facebook @ http://t.co/DZnKSUih
mepeisen ist offline   Mit Zitat antworten
Alt 06.03.2006, 17:57  
Benutzer
 
Registriert seit: 25.10.2004
Beiträge: 43
bratwurstschorsch
Standard

ok danke schon mal für die antwort.

Volltextsuche ist bei Datenmengen von ca. 10GB aufwärts schon etwas Problematisch und Keyworddichten sowie Rankingfaktoren lassen sich damit leider auch nicht berechnen.

Werde mich dann wohl mal etwas JOINs befassen.
bratwurstschorsch ist offline   Mit Zitat antworten
Alt 06.03.2006, 17:59  
Erfahrener Benutzer
 
Registriert seit: 21.12.2004
Beiträge: 5.232
PHP-Kenntnisse:
Fortgeschritten
mepeisen ist ein wunderbarer Anblickmepeisen ist ein wunderbarer Anblickmepeisen ist ein wunderbarer Anblickmepeisen ist ein wunderbarer Anblickmepeisen ist ein wunderbarer Anblickmepeisen ist ein wunderbarer Anblickmepeisen ist ein wunderbarer Anblick
mepeisen eine Nachricht über ICQ schicken mepeisen eine Nachricht über Skype™ schicken
Standard

Zitat:
Zitat von bratwurstschorsch
ok danke schon mal für die antwort.

Volltextsuche ist bei Datenmengen von ca. 10GB aufwärts schon etwas Problematisch und Keyworddichten sowie Rankingfaktoren lassen sich damit leider auch nicht berechnen.

Werde mich dann wohl mal etwas JOINs befassen.
*hust* 10GB Texte. Wer schreibt denn sowas?

Ansonsten ist ein JOIN hier wohl nicht wirklich gut, zumindest für deinen konkreten Fal (Schande über mich, hab jetzt erst in dein Script reingeguckt)l. Wie groß sind deine Keyword-tabellen aktuell?

Auf alle Fälle kannst schonmal auf mysql_insert_id umstellen. Dann entfällt schonmal die Hälfte der Selects im Insert-Fall grundsätzlich.
mepeisen ist offline   Mit Zitat antworten
Alt 06.03.2006, 18:08  
Benutzer
 
Registriert seit: 25.10.2004
Beiträge: 43
bratwurstschorsch
Standard

Also die Keywordtabelle hat momentan 195.286 Datensätze und 8,3 MB Größe. Die Tabelle ist so aufgebaut: id(PRIMARY, auto_increment) | keyword (INDEX)


Zitat:
*hust* 10GB Texte. Wer schreibt denn sowas? Smile
Momentan sind es ca. 600.000 Produkte und insgesammt 1GB. Soll aber noch 10mal so viel werden
bratwurstschorsch ist offline   Mit Zitat antworten
Alt 06.03.2006, 21:11  
axo
Erfahrener Benutzer
 
Registriert seit: 24.12.2004
Beiträge: 1.814
axo ist zur Zeit noch ein unbeschriebenes Blatt
Standard

das sollte schon mit 2 queries zu erledigen sein. soweit ich das sehe, willst du nach der for-schleife nur die ID des keywords wissen.
also:
setz 'keyword' in der Keywordtabelle auf UNIQUE ... und dann
PHP-Code:
$words = array('foo','bar','baz');
$insertValues = array();
foreach( 
$words as $word ) {
   
$insertValues[] = sprintf("('%s')",$word);


$insertQuery "INSERT IGNORE INTO keywordTable (keyword) VALUES ";
$insertQuery .= implode(", "$insertValues);
mysql_query($insertQuery);  // fügt jedes 'neue' keyword in die tabelle und ignoriert bereits existierende.

$selectValues array_map('_quoteSmart',$insertValues);

$selectQuery "SELECT id, keyword FROM keywordTable 
     WHERE keyword IN ("
.implode(', '$selectValues).")";

$qry mysql_query($selectQuery); // holt alle betroffenen keywords mit der passenden ID aus der datenbank.


while(list($keywordID$keyword) = mysql_fetch_row($qry)) {
  
// hier dann ein hash aus keyword => id erzeugen und weiterverarbeiten.
}

// hilfsfunktion für array_map
function _quoteSmart($word) {
   return 
sprintf("'%s'",$word);

... wie's mit der weiteren verarbeitung aussieht, weiß ich nicht - für den suchindex wirst du aber wahrscheinlich nicht einmal
die zweite abfrage brauchen, sondern nur ein UPDATE über mehrere tabellen machen müssen.
axo ist offline   Mit Zitat antworten
Antwort


Themen-Optionen
Thema bewerten
Thema bewerten:

Forumregeln
Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine 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
Gehe zu

Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
aus SELECT Abfragen Hash bauen Reen_Sc Datenbanken 9 27.06.2008 18:48
[Erledigt] Kein Ergebnis bei SELECT (MySQL 4.1.9) dr.e. Datenbanken 4 15.06.2008 19:54
[Erledigt] Mysql Insert Select + Concat Hu5eL Datenbanken 14 10.06.2008 10:39
Abfragen kombinieren Datenbanken 0 01.10.2006 22:11
SELECT AS geht bei AVG net cyberholic Datenbanken 0 04.05.2006 09:43
[JavaScript] Event Handler in form select - Syntax? winfo_cologne HTML, Usability und Barrierefreiheit 5 29.03.2006 16:47
Im Select eine IFF Abfrage bendigo Datenbanken 4 21.11.2005 14:11
Probleme mit Inner Select Datenbanken 0 19.10.2005 15:22
2 Mysql Abfragen: select und insert gleichzeitig??? Datenbanken 12 14.09.2005 14:18
(schnellere) Funktion zum Zusammenfassen von CSS PHP-Fortgeschrittene 21 08.08.2005 16:47
[Erledigt] SELECT in SELECT PHP Tipps 2005 5 06.04.2005 22:30
[Erledigt] Abfragen, aber wie? Datenbanken 4 27.01.2005 20:21
[Erledigt] PHP, Mysql - Abfragen zusammenfassen evtl SubSelect PHP-Fortgeschrittene 2 02.12.2004 10:42
[Erledigt] 2 mal select 1 form PHP-Fortgeschrittene 1 01.09.2004 20:13
select abfragen PHP Tipps 2004 5 12.07.2004 10:25

Besucher kamen über folgende Suchanfragen bei Google auf diese Seite
mysql mehrere abfragen zusammenfassen, 2 mysql requests gleichzeitig php, sql mehrere abfragen zusammenfassen, mehrere select abfragen zusammenfassen, http://www.php.de/datenbanken/37895-hunderte-select-abfragen-zusammenfassen.html, mehrere mysql abfragen zusammenfassen, sql abfragen zusammenfassen, sql zwei abfragen zusammenfassen, access mehrere abfragen zusammenfassen, mysql mehrere inserts zusammenfassen, php select mehrere tabellen zusammenfügen, mysql abfrage in 2 tabellen ergebnis zusammenfassen, sql select zusammenfassen, php script keyworddichte berechnen, java mehrer inserts gleichzeitig, selects zusammenfassen, abfragen zusammenfassen, select abfragen java, sql abfrage zusammenfassen, mysql mehrere selct ergebnisse in einen string fassen

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




Powered by vBulletin® Version 3.7.2 (Deutsch)
Copyright ©2000 - 2012, Jelsoft Enterprises Ltd.
Search Engine Optimization by vBSEO 3.2.0
Aprilia-Forum, Aquaristik-Forum, Liebeskummer-Forum, Zierfisch-Forum, Geizkragen-Forum

Creative Commons License
Dieser Inhalt ist unter einer Creative Commons-Lizenz lizenziert.