Autor | Zpráva | ||
---|---|---|---|
okurkaa Profil |
#1 · Zasláno: 16. 5. 2019, 21:51:14
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 |
#2 · Zasláno: 16. 5. 2019, 22:03:31
UPDATE tabulka SET ... WHERE ... LIMIT 1 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 |
#4 · Zasláno: 16. 5. 2019, 22:46:28
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 |
#5 · Zasláno: 17. 5. 2019, 09:51:28
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 |
#6 · Zasláno: 17. 5. 2019, 11:46:47
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 |
#8 · Zasláno: 17. 5. 2019, 12:07:19
Tomášeek:
A co je na tom špatně? To že je tam na dvou řádcích? |
||
Tomášeek Profil |
#9 · Zasláno: 17. 5. 2019, 12:31:40
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 |
#10 · Zasláno: 17. 5. 2019, 12:34:00
Nech si radu pro sebe, počkám jestli mě poradí někdo jiný.
|
||
blaaablaaa Profil |
#11 · Zasláno: 17. 5. 2019, 12:35:05
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 |
#12 · Zasláno: 17. 5. 2019, 12:40:00
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 |
#13 · Zasláno: 17. 5. 2019, 13:09:24
okurkaa:
UPDATE phpbb_topics SET topic_posts_approved 0 WHERE topic_posts_approved 2 LIMIT 1 = .
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 |
#14 · Zasláno: 17. 5. 2019, 13:21:02
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 |
#16 · Zasláno: 17. 5. 2019, 14:25:51
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 |
#17 · Zasláno: 17. 5. 2019, 14:27:02
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 |
#19 · Zasláno: 17. 5. 2019, 15:45:49
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 |
#21 · Zasláno: 17. 5. 2019, 16:04:57
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 |
#22 · Zasláno: 17. 5. 2019, 16:07:09
Keeehi:
Tak to jsem nevěděl. Každopádně opravdu děkuji moc za trpělivost se mnou. |
||
Časová prodleva: 5 let
|
0