Beste forumleden,

Zelf probeer ik hetvolgende, ik heb deze mysqli query gemaakt:

$settingquery = mysqli_query($connect_mysql, "SELECT * FROM `usersettings` WHERE `user_id` = '".$user['id']."'");
$setting = mysqli_fetch_assoc($settingquery);

Nu wil ik eigenlijk niet steeds opnieuw dezelfde query maken om elke keer een andere info op te vragen.
Ik wil bijvoorbeeld in dat tabel de informatie van bijvoorbeeld setting_id de POB tonen, hoe kan ik dit het beste doen zonder de volgende query:

$settingquery = mysqli_query($connect_mysql, "SELECT * FROM `usersettings` WHERE `user_id` = '".$user['id']."' AND `setting_id` = 'POB'");
$setting = mysqli_fetch_assoc($settingquery);

Alvast bedankt voor de hulp
Als ik zo zie haal je nu alle usersettings van één persoon op in een array in $settings.
Dus dan kan je alles van die persoon al ophalen, zodat je die per setting kan benaderen:

$setting['use_tracker']
$setting['refresh_newspage_automatically']
etc....
** quoteknip **
Ik haal het van een persoon op maar:
er zijn voor die persoon meerdere rijen.

Bijvoorbeeld een rij met: POB en BDAY

Hetgeen wat ik wil bereiken is, met één query meerdere rij value's ophalen bijvoorbeeld:

Hier de POB: $settings['setting_id'] = POB = Vlissingen (staat in table)
Hier de BDAY: $settings['setting_id'] = 'BDAY' = datum (staat in table)

Beiden dus losse rijen

Het zijn toch losse records, met de settings en de UserID?
Dan zijn we er toch al? het is niet dat elke aanroep een nieuwe query aanmaakt.
** quoteknip **

Dan moet ik toch bij elke row de query opnieuw uitvoeren bijvoorbeeld:

$settingquery = mysqli_query($connect_mysql, "SELECT * FROM `usersettings` WHERE `user_id` = '".$user['id']."' AND `setting_id` = 'POB'");
$setting = mysqli_fetch_assoc($settingquery);

Of is er nog een snellere manier?
Elke setting type is een aparte regel trouwens
Waarom wil je de query opnieuw uitvoeren?
Je slaat de hele array met *alle* settings van de gebruiker op in $settings. Of is die lijst echt gruwelijk groot met vele honderden records?
** quoteknip **

Elke setting is één row dus je hebt voor alle gebruikers een database waar per setting één aparte regel is, ik wil per aparte regel werken dus als ik de regel POB wil hebben moet ik dus op basis van id en setting_id de info uit die regel tonen, het is dus niet dat alle settings in één regel staan.

Ik zag eerder iets van $settings->POB->input1 maar weet niet hoe dat precies werkt
Als elke setting één row is, dan is het probleem toch opgelost? Dat laat ik ook in mijn oplossing zien...
Gooi $setting anders eens door print_r() en zie wat er in zit.

En graag niet steeds het voorgaande bericht volledig quoten a.u.b. want dat is nergens voor nodig. ;-)
Dat betekent dus dat ik bij elke ophaling van de setting één query dien uit te voeren?
Neen, je haalt ze allemaal in één keer op.
Dat is toch niet erg....

..of gaat het om vele honderden?
Als je alle settings voor één user wilt ophalen dan moet dat stukje AND `setting_id` = 'POB' er natuurlijk uitgelaten worden.

Het probleem waar je waarschijnlijk tegen aanloopt is dat je dan een lusje moet maken waarmee je alle records inleest in een array of een class.


<?php
// default settings
$settings = [
'POB' => 0,
'BDAY' => 1
];

// run query
$result = mysqli_query($connect_mysql, "SELECT * FROM usersettings WHERE user_id=" . $user['id']);
if($result === false) {
throw new Exception(mysql_error($connect_mysql));
exit;
}

// overschrijf settings
while($row = mysqli_fetch_assoc($result)) {
$settings[$row['setting_id']] = $row['setting_value']; // IK WEET NIET WELKE KOLOMNAMEN JE HEBT DUS VERANDER settings_value naar een bestaande kolomnaam.
}

// voor deze test laat even het resultaat zien
echo '<pre>' . print_r($settings, true) . '</pre>';

// normaal gebruik
if($settings['POB'] == 0) {
// doe iets
}
?>

Reageren