ID - Zwischenraum in MySQL-DB optimieren, wie geht das?

Alles, was PHP betrifft, kann hier besprochen werden.

ID - Zwischenraum in MySQL-DB optimieren, wie geht das?

Postby www.internet-umfrage.ch » 21. January 2005 10:30

Hallo

Newbi an Welt

Wie kann ich in einer MySQL-Tabelle die Zeilen neu durch-nummerieren lassen
.....

Beispiel:

In einer Tabelle hat es 5 Zeilen mit ID's 1,2,3,4,und 5 /increment

wenn ich nun den Eintrag(=Zeile) 3 lösche, habe ich nur noch die
ID's 1,2,4,und 5

Ich möchte nun, dass in MySQL neu durchnummeriert wird, sodass ich
danach neu die ID 1,2,3 und 4 in der Tabelle habe

Warum? ...

Ich lese per Zufalls-Zahl eine ID= Zeile der Tabelle aus und gebe diese aus. Wenn nun der "Zufall" eine nicht mehr existierende ID wählt (in diesem Fall oben = die ID 3 =gelöscht) bekomme ich eine Fehlermeldung.


Danke für Feedback



-------------->>Um dies geht es<<---------------------
User avatar
www.internet-umfrage.ch
 
Posts: 23
Joined: 08. November 2004 14:55
Location: Ein Besuch lohnt sich:

Postby Wiedmann » 21. January 2005 12:05

Das Konzept der Id'S (womöglich noch der primary key?) ist halt eben das sie eindeutig sind....

Also ist das Script defekt ;-)
Du müsstest ja nur Abfragen ob es die zufällig ermittelte ID gibt. Oder du lässt dir gleich von MySQL einen zufälligen Datensatz aussuchen (dann stellt sich dein Problem schon nicht...).

(Man könnte die Spalte auch löschen und neu anlegen, dann wäre sie neu durchnummeriert. Aber wirklich zu empfehlen ist das nicht...)
Wiedmann
AF Moderator
 
Posts: 17102
Joined: 01. February 2004 12:38
Location: Stuttgart / Germany

Hilfe, schon 2 Std. ohne Erfolg

Postby www.internet-umfrage.ch » 21. January 2005 18:08

Hilfe, ...

Schon seit 2 Std. und es will nicht ... bin wohl zu Newbie auf PHP

Habe es mit "while", mit "if" etc ... probiert, ... (gelesenes aus dem Netz), aber das ist mir zuviel. Was sollte ich tun, er gibt mir immer zurück, dass er bei der Stelle /mysql_result($result, 0)/ nicht auf die 0 gehen kann?! Vermutlich, weil die ID ja nicht existiert. Wie kann ich das prüfen, und eine neue ID mit random wählen bis eine existiert und danach weiter geht im Script? Oder wie geht das ... Dein Zitat:"---MySQL auswählen lassen---?"

-------------------------------------------------------------------------------------

Der Teil daraus:

<?PHP include("config.inc.php"); ?>
<?PHP
/* Verbindung zur Datenbank aufbauen */
$db = @mysql_connect($host,$user,$pass) or die(mysql_error());
@mysql_select_db($datab,$db);

/* Anzahl der Gesamteintraege auslesen */
$result = @mysql_query("SELECT COUNT(*) FROM $table");
$row = mysql_fetch_row($result);

/* Zufallszahl erzeugen */
mt_srand((double)microtime()*1000000);
$number = mt_rand(0,$row[0]-1);
$numberjoke = $number;

/* Wählen mit der Zufallszahl*/
$result = @mysql_query("SELECT entry FROM $table WHERE eid=$numberjoke");
$row = mysql_fetch_row($result);


$htmlbody= mysql_result($result, 0); // gibt den Satz in die Seite zurück
echo $htmlbody;

....




Jetzt schon vielen Dank für einen genaueren Tipp und Feedback[/quote]
User avatar
www.internet-umfrage.ch
 
Posts: 23
Joined: 08. November 2004 14:55
Location: Ein Besuch lohnt sich:

Postby Wiedmann » 21. January 2005 19:28

Code: Select all
$result = mysql_query("
    SELECT `entry`
    FROM `$table`
    ORDER BY RAND()
    LIMIT 1
") or die(mysql_error());
Wiedmann
AF Moderator
 
Posts: 17102
Joined: 01. February 2004 12:38
Location: Stuttgart / Germany

Danke!

Postby www.internet-umfrage.ch » 21. January 2005 22:16

Da hätte ich noch einige a4-Seiten voll gekritzelt um das Script umzubauen ohne Deine Hilfe, vielen Dank! :D

Ich musst noch einige andere Variablen aus dem Zufalls-Datensatz
herausbekommen für mein gesamtes Script. Dies hab ich gelöst, es funktioniert, vermutlich aber nicht astrein geschrieben das Script.

Sollte es interessieren, hier das laufende korrekte Php-Script:

<?PHP include("config.inc.php"); ?>
<?PHP
/* Verbindung zur Datenbank aufbauen */
$db = @mysql_connect($host,$user,$pass) or die(mysql_error());
@mysql_select_db($datab,$db);

$result = @mysql_query("SELECT entry FROM $table ORDER BY RAND() LIMIT 1") or die(mysql_error());
$row = mysql_fetch_row($result);
$htmlbody= mysql_result($result, 0); // gibt den Satz in die Seite zurück

$result = @mysql_query("SELECT counts FROM $table WHERE entry='$htmlbody'");
$countsx= mysql_result($result,0); // gibt den Satz in die Seite zurück


$result = @mysql_query("SELECT vote_value FROM $table WHERE entry='$htmlbody'");
$valuex= mysql_result($result,0);



$result = @mysql_query("SELECT vote_anz FROM $table WHERE entry='$htmlbody'");
$anzx = mysql_result($result,0);


$result = @mysql_query("SELECT pid FROM $table WHERE entry='$htmlbody'");
$zidxa = mysql_result($result,0);

$result = @mysql_query("SELECT eid FROM $table WHERE entry='$htmlbody'");
$numberjoke = mysql_result($result,0);



$var = $htmlbody;
$var = str_replace('&lt;', '`', $var);
$var = str_replace('<br>', ' ', $var);
$var = str_replace('</br>', ' ', $var);
$var = str_replace('<', '`', $var);
$var = str_replace('>', '`', $var);
$var = str_replace('&gt;', '`', $var);
$var = str_replace('&quot;', '`', $var);
$var = str_replace('&amp;', '&', $var);
$var = str_replace('&euro;', '€', $var);
$var = str_replace('&szlig;', 'ß', $var);
$var = str_replace('&uuml;', 'ü', $var);
$var = str_replace('&Uuml;', 'Ü', $var);
$var = str_replace('&ouml;', 'ö', $var);
$var = str_replace('&Ouml;', 'Ö', $var);
$var = str_replace('&auml;', 'ä', $var);
$var = str_replace('&Auml;', 'Ä', $var);
$var = str_replace('<br/>', ' ', $var);
$var = str_replace('br/', ' ', $var);
$var = str_replace(''','`', $var);
$joke = $var;


mysql_close();

echo $joke;

echo "counts: $countsx";
echo "value: $valuex";
echo "anz: $anzx";
echo "zid:$zidxa";
echo "Witz-Nr.(ID): $numberjoke";





?>

//ende

PS: Warum ich bei entry='$htmlbody' immer mit diesen einfachen Gänsefüsschen machen musste weiss ich auch nicht, bin zufällig auf diese
Lösung gestossen beim probieren. Ohne geht es nicht?!

Aber ... Big Txs an Mr.Wiedemann!


Wie man im Script sieht geht es um "joke" :-) Wer Lust hat die fertige Seite zu bestaunen, (Man kann sogar ein tägliches Joke-Mail haben und im Mail direkt eine Bewertung an das Script zurücksenden) kann hier mal
liebäugeln: :arrow: Swiss-Joke ;-)
:!: Danke nochmals, eine geniale Community hier! :!:
User avatar
www.internet-umfrage.ch
 
Posts: 23
Joined: 08. November 2004 14:55
Location: Ein Besuch lohnt sich:

Postby Wiedmann » 21. January 2005 23:50

PS: Warum ich bei entry='$htmlbody' immer mit diesen einfachen Gänsefüsschen machen musste weiss ich auch nicht, bin zufällig auf diese
Lösung gestossen beim probieren. Ohne geht es nicht?!

Nein. Ein Blick in die SQL-Doku sagt uns, dass die da hingehören...
Wiedmann
AF Moderator
 
Posts: 17102
Joined: 01. February 2004 12:38
Location: Stuttgart / Germany


Return to PHP

Who is online

Users browsing this forum: No registered users and 8 guests