Autor Zpráva
okurkaa
Profil
Mám v databázi MySQL v tabulce
FORUM 1
FORUM 1
FORUM 1...
Jak to udělat pomocí SQL aby se změnilo FORUM 1 na FORUM 2, ale vždy pouze ten první záznam a ne všechny.
Chtěl bych ten SQL dotaz spouštět pomocí CRON úlohy.
juriad
Profil
UPDATE tabulka SET ... WHERE ... LIMIT 1
Toto změní náhodně jeden vyhovující záznam. Pokud jsou všechny záznamy stejné, tak není možné určit, který je první.

Otázkou je spíš, proč máš v databázi několik stejných záznamů. Další otázkou je, co je "FORUM 1" a proč se opakuje? Nesnažíš se použít databázi jako Excel?
okurkaa
Profil
Bude to dobré když to vždy změní jen jeden, přesně to potřebuji.
Bude to fungovat takto jako CRON? Raději se ptám než to zkusím abych to nějak nerozhodil ty databáze:

<?php
$dbms = 'phpbb\\db\\driver\\mysql';
$dbhost = '127.0.0.1';
$dbname = 'encyklocz1';
$dbuser = 'encyklo';
$dbpasswd = '***není***zač***';
$table_prefix = 'phpbb_';

UPDATE tabulka SET FORUM 1 WHERE FORUM 2 LIMIT 1;
juriad
Profil
okurkaa:
Nebude. Musíš se k databázi připojit a následně spustit dotaz.

$link = mysqli_connect($dbhost, $dbuser, $dbpassword, $dbname);
mysqli_query($link, "UPDATE ...");

Ten UPDATE také není správně. Tabulka se tozhodně nebude jmenovat "tabulka". Co je FORUM? Je to název sloupečku v nějaké tabulce? Čeho se snažíš dosáhnout? Evidentně jde o nějaké přesouvání mezi fóry v phpbb.
okurkaa
Profil
juriad:
Ano máte pravdu. Chci pomocí CRON pravidelně přesouvat příspěvky z jednoho fóra do druhého ale zatím se mě to vůbec nedaří.
okurkaa
Profil
Už v tom mám jasno. Potřebuji v tabulce PHPBB_TOPICS přepsat "topic_posts_approved 0" na "topic_posts_approved 2" a potom "topic_visibility 0" na "topic_visibility 1"

Je to správně? Nerozhodí to tu tabulku?

<?php
$dbms = 'phpbb\\db\\driver\\mysql';
$dbhost = '127.0.0.1';
$dbname = 'encyklocz1';
$dbuser = 'encyklo';
$dbpasswd = '***není***zač***';
$table_prefix = 'phpbb_';
$link = mysqli_connect($dbhost, $dbuser, $dbpassword, $dbname);
mysqli_query($link, "UPDATE phpbb_topics SET topic_posts_approved 0 WHERE topic_posts_approved 2 LIMIT 1; ");
mysqli_query($link, "UPDATE phpbb_topics SET topic_visibility 0 WHERE topic_visibility 1 LIMIT 1; ");
Tomášeek
Profil
okurkaa:
Zacni tím, ze se naučis syntaxi sql dotazu. Ten update je samozřejmě syntakticky špatně.
okurkaa
Profil
Tomášeek:
A co je na tom špatně? To že je tam na dvou řádcích?
Tomášeek
Profil
okurkaa:
Fakt to nemá cenu. Nauč se syntaxi sql dotazu, od toho tu diskuze není. Pak prijd pro radu, budeš-li ji potřebovat.
okurkaa
Profil
Nech si radu pro sebe, počkám jestli mě poradí někdo jiný.
blaaablaaa
Profil
okurkaa:
Poradil bych, aby ses podíval do dokumentace, jak se píšou SQL dotazy, jsou tam i praktické ukázky - dev.mysql.com/doc/refman/8.0/en/update.html
okurkaa
Profil
blaaablaaa:
No nic, už to nechci vědět. Chtěl jsem to mít hotové než půjdu do práce. Nechte si to pro sebe, já nemám čas se to jít učit. Dělat to holt nebudu, snad jste spokojený.
Snad budete někdy potřebovat pomoct ode mě. Zachovám se stejně nebojte. Čau
Keeehi
Profil
okurkaa:
UPDATE phpbb_topics SET topic_posts_approved 0 WHERE topic_posts_approved 2 LIMIT 1
Problém je, že na označených místech ti chybí operátor. V prvním případě pro přiřazení, v druhém pro porovnání. V obou případech je to znak =.
Tohle ale není nic složitého. Na to bys měl přijít když se podíváš na jakýkoli správně napsaný dotaz. Jako ano, někdo ti to mohl napsat rovnou ale ty jsi se také mohl trochu snažit a ne jen pasivně čekat. Zabralo by ti to tak maximálně deset minut úprorného hledění na tvůj dotaz a nějaký z dokumentace a porovávání jejich částí.
juriad
Profil
Problém je také v tom, že v části SET říkáš, jaká má být nová hodnota a ve WHERE jaká je stará hodnota; ty jsi to prohodil.

Další problém může být v tom, že UPDATE by mohl změnit dva nesouvisející řádky. Nevím, zda by ti to vadilo; pokud ano:
UPDATE phpbb_topics SET topic_posts_approved = 2, topic_visibility = 1 WHERE topic_posts_approved = 0 AND topic_visibility = 0 LIMIT 1
okurkaa
Profil
Děkuji ještě se zeptám, proč je tento zápis špatně? Nezmění hodnotu 4 na 2 , prostě se nestane nic.
UPDATE phpbb_topics SET forum_id = 4 WHERE forum_id = 2 LIMIT 1


Už to vidím, zadávám to obráceně.


Jdu to ještě otestovat.


Testuji to takto, ale vyhodí to chybu 500 a opravdu nevím co je na tom špatně

<?php 
$dbhost = 'm44.wedos.net';
$dbuser = 'a181xxx_data';
$dbpasswd = 'FHxxxxdaw';
$dbname = 'd1818ccccdata';
$link = mysqli_connect($dbhost, $dbuser, $dbpassword, $dbname); 
UPDATE phpbb_topics SET forum_id = 4 WHERE forum_id = 2 LIMIT 1
blaaablaaa
Profil
okurkaa:
To je pořád dokola. Nemůžeš míchat php a SQL dohromady, ale musíš zavolat funkci, která dotaz provede, jak už ti psal [#4] juriad
Tomášeek
Profil
okurkaa:
LOL, to jako fakt? To už je moc. V kolik ze jdeš do te práce?

Práce s SQL manuálem, s error logem, nebo aspoň testovacím prostředím (kde si to pustis bez rizika zničeni ostrých dat) ti nic neříká. To není o nechutí poradit, ale o tvoji nehorázné lenosti.

A sorry, ale “já nemám čas se to učit”, to je výsměch.
okurkaa
Profil
Doplnil jsem to ještě takto, zobrazí se jen bílá stránka, ale SQL dotaz se neprovede. Přitom když zadám SQL v phpmyadmin tak se provede. Co je na tom ještě špatně?

<?php 
$dbhost = 'm44.wedos.net';
$dbuser = 'a181xxx_data';
$dbpasswd = 'FHxxxxdaw';
$dbname = 'd1818ccccdata';
$link = mysqli_connect($dbhost, $dbuser, $dbpassword, $dbname); 
mysqli_query($link, "UPDATE phpbb_topics SET forum_id = 2 WHERE forum_id = 4 LIMIT 1");



Tomášeek:
To že se s tím dělám od rána od 6.00 to je opravdu důkaz o mojí lenosti :-))))))


Už opravdu nevím, protože si myslím že teď by to mělo být ono.


Nevidím že by tam chyběla nějaká čárka nebo uvozovka nebo něco tak. Pomůžete prosím?
Keeehi
Profil
Takhle si můžeš vypsat problémy.
<?php 
$dbhost = 'm44.wedos.net';
$dbuser = 'a181xxx_data';
$dbpasswd = 'FHxxxxdaw';
$dbname = 'd1818ccccdata';
$link = mysqli_connect($dbhost, $dbuser, $dbpassword, $dbname); 

if (mysqli_connect_errno()) {
    printf("Connect failed: %s\n", mysqli_connect_error());
    exit();
}

if (!mysqli_query($link, "UPDATE phpbb_topics SET forum_id = 2 WHERE forum_id = 4 LIMIT 1")) {
    printf("Error: %s\n", mysqli_error($link));
}

printf("Affected rows (UPDATE): %d\n", mysqli_affected_rows($link));

Kdyby jsi chtěl náhodou tvrdit, že je to moc složité a že na to bys nikdy nepřišel, tak věř, že jsem to zkopíroval z PHP manuálu (link1 link2). Jediná věc co jsem musel změnit je vložit tvůj dotaz na řádku 13, ale jinak všechny ty kontroly jsou jen zkopírované z těch ukázek co tam jsou!
okurkaa
Profil
Píše to Connect failed: Access denied for user 'a18xxx2_data'@'10.36.558.5(using password: NO)

Přitom mám ty údaje ale zadané dobře.


Už je to v pořádku, víš proč mě to pořád nešlo? Nahoře je $dbpasswd a má tam být dbpassword.
Omlouvám se a díky za trpělivost. Díky moc za pomoc. Mějte se a omlouvám se že jsem tolik otravoval....
Keeehi
Profil
okurkaa:
Už je to v pořádku, víš proč mě to pořád nešlo? Nahoře je $dbpasswd a má tam být dbpassword.
Kdybys měl zapnuté vypisování chybových hlášek, tak by ti PHP samo řeklo, že používáš proměnnou, kterou nezná.
okurkaa
Profil
Keeehi:
Tak to jsem nevěděl. Každopádně opravdu děkuji moc za trpělivost se mnou.

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm:

0