Multi update?
Ik ben op zoek naar een soort van multi update???
Het verhaal :
Ik moet voor me stage bedrijf een poll maken die je kunt veranderen in het CMS alleen nu moet ik als ik een poll actief maak meoten alle andere polls standaard op non-actief gaan..
als hij actief is, is hij waarde 1 is hij niet actief waarde 0..
aan mij de vraag of dit haalbaar is??
alvast bedankt!
Tip: Ga SQL leren, dit is nauwelijks meer dan basiskennis.
maar toch bedankt pgFrank
Daarnaast is er ook nog een IF functie in een query i.p.v. CASE. Maar CASE werkt net zo makkelijk.
Ps. Gebruik wel een database die je kunt vertrouwen, anders heb je er nog niets aan. MySQL-databases vallen 9 van de 10 keer dan ook af, die zijn niet (goed) geconfigureerd.
De volgende query hoort op iedere database te mislukken:
Appels (integers) en peren (text) kun je niet bij elkaar optellen. Mocht jouw database dit niet afkeuren, weet je dat het goed fout zit... Sterkte!
@PgFrank: Okee ik heb getest wat jij zei en volgens mij is het niet echt goed.
Ik heb me error meldingen AAN staan en krijg GEEN error, dat zal je vast niks verbazen, :-P
Haha
dit heb ik getest het kan ook zijn dat ik het fout gedaan heb.
Code (php)
1
2
3
4
5
6
7
2
3
4
5
6
7
<?php
$test = mysql_query("SELECT 1 + 'a'") or die (mysql_error());
$test1 = mysql_fetch_assoc($test) ;
echo $test1;
?>
$test = mysql_query("SELECT 1 + 'a'") or die (mysql_error());
$test1 = mysql_fetch_assoc($test) ;
echo $test1;
?>
Zit er dan z'n groot verschill tussen MysQl en gewoon sQl ?
Foutmeldingen aanzetten in PHP is leuk en aardig, maar zolang de database de grootste onzin als "correcte" resultaten retour geeft, heb je daar niets aan. MySQL heeft (net zoals vrijwel iedere database) een eigen dialect van SQL geïmplementeerd, alleen heeft MySQL een variant bedacht die niet betrouwbaar is en zeer afhankelijk is van de versie en instellingen die je gebruikt. Wat de ene keer wel werkt, werkt de andere keer niet meer. Aan jou de uitdaging om dit betrouwbaar te krijgen...
Ga de boel eerst maar eens configureren en alle huidige scripts testen. Grote kans dat je daar nog de nodige fouten in gaat ontdekken maar dat ligt ook weer aan jouw kennis van het testen. Ga er maar vanuit dat eenniet-geconfigureerde MySQL-database in 99 van de 100 gevallen onderuit is te halen, er zitten altijd wel ergens foutjes in een query.
Verder kan het geen kwaad om over te stappen op een betrouwbare database, PostgreSQL (gratis), FireBird (gratis), SQL Server (gratis + $$), Oracle (gratis + $$$$$), alles is beter dan MySQL.
haha pgFrank blijft een held hahaha :p
The dialect of SQL supported by MySQL version x is called MySQL dialect. Transact-SQL dialect is more powerful language than MySQL dialect.
Alleen is het dan ook zo dat als je een andere database neemt ook je codes veranderen (bedoel de Query's enzo) of zijn die query codes voor de meeste databases het zelfde..
Hier mee ga ik zeker weten meer mee doen..!!
@Dennis: hahaha A Super Hero, The Savier of MysQl Crimes
Gewijzigd op 01/01/1970 01:00:00 door Yoram
Daarom heb ik op VMware Ubuntu Server geinstalleerd, met daarop Apache2, PHP5 en PostgreSQL!!
Bij overstap op een andere database heb je ook andere code nodig, een functie zoals mysql_query() zal uiteraard niet werken op een andere database. pg_query() voor PostgreSQL is echter niet heel veel moeilijker... De SQL zul je ook moeten aanpassen, een aantal structuren zijn ietsjes anders en foute queries worden direct afgeschoten. Je zult nooit onzin retour krijgen, dat is met andere database niet mogelijk.
Mysql zou je dus kunnen vergelijken met vrije school waar kinderen doen en laten kunnen wat ze maar willen .. en PostgresSQL of SQL is meer een Internaat ?
pgFrank schreef op 02.04.2009 12:59:
.... een aantal structuren zijn ietsjes anders en foute queries worden direct afgeschoten. Je zult nooit onzin retour krijgen, dat is met andere database niet mogelijk...
Ik krijg nu als ik mysql_num_rows gebruik bij een query HOOR ik officeel maar een cijfer 1 2 3 etc te krijgen maar ik kreeg 334 (die 4 staat voor de aantal dat ik heb op 1 had staan.) dus is dus die onzin wat jij zei ?
Bedankt voor de info Frank ben nu een heel stuk meer te weten nu waarom er zo veel databases zijn.. En waarom Mysql zo veel gebruikt word (net Vista / XP, is ook standaard maar faalt in zo veel opzichten).
De functie mysql_num_rows() geeft aan hoeveel records er zijn opgehaald met een SELECT-query, dat werkt prima. Maar heeft dan ook maar weinig met de database zelf te maken. Na een UPDATE (of INSERT of DELETE) kun je met mysql_affected_rows() het aantal geraakte records opvragen. Voor PostgreSQL (en andere databases) zijn soortgelijke functies in PHP aanwezig. Al kun je in PostgreSQL ook gewoon in SQL opvragen welke records zijn geraakt, RETURNING doet wonderen.
Vista/XP is minstens 100x beter dan MySQL, voor zover je een operating system met een database kunt vergelijken. Vista/XP mag wat gevoelig zijn voor virussen e.d. maar het verzint geen onzin. En dat doet MySQL wel.
Ook werkt het niet helemaal wat jij zei, het werkt voor 1 record goed..
maar ik moet de hele colom dan in een x moeten kunnen aanpassen..
er mag zeg maar een record in de colom 1 zijn.
id actief
============
1 | 0
2 | 1
3 | 0
4 | 0
5 | 0
Hier is id 2 actief nu als ik bijvoorbeeld id 4 actief wil maken moet id 2 automatisch op 0 gaan.. Zodat er ALTIJD een actief is..
telkens worden er verschillende id's weg gegooit dus dan krijg ik meer zoiets als:
id actief
============
1 | 0
2 | 1
7 | 0
13 | 0
20 | 0
Bijvoorbeeld elke x worden er verkeerde id's weg gegooit, (achter z'n id zit nog wel meer gegevens).
Maar is daar een code voor of moet je dan gewoon met een while alle id's af laten gaan ? zoiets:?
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
2
3
4
5
6
7
8
9
10
11
12
13
<?php
$x = 1;
while($x = $i) {
$sql = "UPDATE poll SET poll_actief =
CASE
WHEN poll_id = $_GET['poll_id'] THEN 1;
ELSE 0
END
WHERE poll_id = '".$x."' ";
$x++;
}
?>
$x = 1;
while($x = $i) {
$sql = "UPDATE poll SET poll_actief =
CASE
WHEN poll_id = $_GET['poll_id'] THEN 1;
ELSE 0
END
WHERE poll_id = '".$x."' ";
$x++;
}
?>
Is dit dan zoiets die daar voor kan zorgen ?
of zie ik he tnu helemaal verkeert
Gewijzigd op 01/01/1970 01:00:00 door Yoram
Code (php)
1
2
3
4
5
6
7
8
9
10
11
2
3
4
5
6
7
8
9
10
11
<?php
$sql = "
UPDATE
poll
SET
poll_actief =
CASE
WHEN poll_id = ".$_GET['poll_id']." THEN 1
ELSE 0
END;";
?>
$sql = "
UPDATE
poll
SET
poll_actief =
CASE
WHEN poll_id = ".$_GET['poll_id']." THEN 1
ELSE 0
END;";
?>
Waarom je zo graag SQL injection wilt hebben in je database, is mij een raadsel. Zorg maar voor goede backups, met een beetje pech help jij zelf je eigen database naar de klote en zul je die backups hard nodig hebben.
Hij werkt nu dat hij automatisch de andere update alleen nu zet hij de naam van alle andere ook naar de zelfde naam als waar ik hem actief maak.
maar dat probleem is ook al op gelost had namelijk deze code:
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
2
3
4
5
6
7
8
9
10
11
12
13
14
<?php
$poll_id_update = mysql_real_escape_string($_GET['poll_id']) ;
$mysql_update_poll = mysql_query("UPDATE plug_poll
SET
poll_vraag = '".$add_poll_vraag."',
poll_soort = '".$add_poll_soort."',
poll_actief = CASE
WHEN poll_id = '".$poll_id_update."' THEN 1
ELSE 0
END,
poll_datum = NOW()
") or die(mysql_error());
?>
$poll_id_update = mysql_real_escape_string($_GET['poll_id']) ;
$mysql_update_poll = mysql_query("UPDATE plug_poll
SET
poll_vraag = '".$add_poll_vraag."',
poll_soort = '".$add_poll_soort."',
poll_actief = CASE
WHEN poll_id = '".$poll_id_update."' THEN 1
ELSE 0
END,
poll_datum = NOW()
") or die(mysql_error());
?>
Is het dan het verstandigste dat ik dat actief zeg maar in een lossen UPDATE neer zet ?
Gewijzigd op 01/01/1970 01:00:00 door Yoram
Quote:
Is het dan het verstandigste dat ik dat actief zeg maar in een lossen UPDATE neer zet ?
Waarom zou je dat willen? Waarom 2 queries uitvoeren wanneer je met 1 query exact hetzelfde bereikt?
Quote:
en natuurlijk verbeter ik die dingen daarin wel!!
Achteraf beveiliging inbouwen gaat altijd fout. Zie de vele, vele voorbeelden van SQL injection, allemaal van die prutsers die dachten achteraf de boel te kunnen beveiligen. Dat lukt niet, dat gaat al jaren fout en zal altijd fout blijven gaan. Vanaf het begin dichtspijkeren en je hebt er nooit last van.
Handige functie in PHP voor PostgreSQL: pg_query_params(). Connectie, query en parameters opgeven en SQL injection wordt onmogelijk.
Is het soms te nieuw?
Maar goed, je hebt maar 1 provider nodig.
Ps. Mocht je zelf PostgreSQL gaan installeren, ga hem dan (t.z.t.) wel even zo configureren dat het beschikbare geheugen ook voor de database beschikbaar komt. Wanneer de db slechts 128MB ram mag gebruiken, zal deze nooit echt snel kunnen werken, ook niet wanneer er 16GB ram aanwezig is... Wanneer je een beetje handig bent, kun je zelfs een soort van turbo maken waarmee je specifieke queries ineens 10x zo snel kunt uitvoeren zonder dat anderen daar last van hebben.
want hier ga ik ook eens mee stoeien..
Add mij even op msn ;) Ik PM je :)