Hi, bij een bepaalde query krijg ik de volgende tabel:


room_id 	type 	images 	title 	body 	service_name 	
1 	Deluxe 	room-01a.jpg 	Double Room 	Content room	Wifi
1 	Deluxe 	room-01b.jpg 	Double Room 	Content room	Wifi
1 	Deluxe 	room-01a.jpg 	Double Room 	Content room	Flatscreen
1 	Deluxe 	room-01b.jpg 	Double Room 	Content room	Flatscreen
1 	Deluxe 	room-01a.jpg 	Double Room 	Content room	Parking
1 	Deluxe 	room-01b.jpg 	Double Room 	Content room	Parking
1 	Deluxe 	room-01a.jpg 	Double Room 	Content room	Roomservice
1 	Deluxe 	room-01b.jpg 	Double Room 	Content room	Roomservice


De volledige uitkomst gaat over room_id=1, maar doordat de room 2 afbeeldingen heeft en 4 verschillende services beidt heb ik een tabel met 8 regels.

Hoe kan ik deze uitlezen daar ik nu geen enkele regel heb voor deze room.

wordt dat een lus in een lus?? Wie kan me helpen, ik heb enkel ervaring met tabellen waarbij er maar 1 regel zou zijn, maar dat zien jullie ook wel ;-)
Ja, de keus is altijd of meerdere queries of binnen PHP uitrafelen. Probeer eens:

$result is een array van alle rijen uit de database.
<?php
$arr = [];

foreach($result as $row) {
foreach($row as $col => $field) {
$arr[$col][$field] = $field;
}
}
echo '<pre>';
print_r($arr);
echo '</pre>';
?>

[size=xsmall]Toevoeging op 18/11/2014 10:06:39:[/size]

Of zo:
<?php
$arr = [];

// verkrijg de kolomnamen in een array
$keys = array_keys($result[0]);

// loop door de kolommen
foreach($keys as $key)
{
//pak van alle records de kolom waarde en zet die in een array, vervolgens verwijder dubbele waardes
$arr[$key] = array_unique(array_column($result, $key));
}
echo '<pre>';
print_r($arr);
echo '</pre>';
?>
Dank je Frank ik ga het gelijk proberen...

[size=xsmall]Toevoeging op 18/11/2014 10:29:18:[/size]

Hi Frank die eerste is voor mij het beste:

uitkomst:

Array
(
    [room_id] => Array
        (
            [1] => 1
        )

    [type] => Array
        (
            [Deluxe] => Deluxe
        )

    [image_name] => Array
        (
            [room-01a.jpg] => room-01a.jpg
            [room-01b.jpg] => room-01b.jpg
        )

    [title] => Array
        (
            [Double Room] => Double Room
        )

    [body] => Array
        (
            [Content room] => Content room
        )

    [service_name] => Array
        (
            [Wifi] => Wifi
            [Flatscreen] => Flatscreen
            [Parking] => Parking
            [Roomservice] => Roomservice
        )

)
Codeigniter altijd +1
Frank Nietbelangrijk op 18/11/2014 09:49:04

Ja, de keus is altijd of meerdere queries .......

Niet noodzakelijk:

<?php
$sql= 'SELECT
	r.room_id,
	r.room_name,
	GROUP_CONCAT(i.image_name) image_list
	GROUP_CONCAT(s.service_name) service_list
FROM
	rooms r
JOIN
	images i
	USING (room_id)
JOIN
	services s
	USING (room_id)
GROUP BY
	r.room_id';
$result = $this->db->query($sql)->result();
foreach ($result as $key => $room) {
	$result[$key]->image_list = explode(',', $room->image_list);
	$result[$key]->service_list = explode(',', $room->service_list);
}

Hi Ger,

Ik had die van Frank gebruikt en die werkt goed, maar wat jij daar plaatst ziet er indrukwekkend uit. Ga dit zeker gebruiken.

Bedankt!
@jennifer Waarom gebruik je in CodeIgniter geen querybuilder (active-record)
Je kan op deze manier gemakkelijker een query bouwen.


<?php
$this->db->get_where('rooms', array('id' => 1));
$this->db->join('images', 'images.id = room.id');
$result = $this->db->get();
?>
Hi Rickert, heel erg bedankt voor je reactie. Ik ben op de hoogte van de active-record binnen CI, maar heb (eenvoudige) queries op deze manier leren maken. Voor mij is het handiger omdat ik niet alleen met CI werk.
Jennifer Van W op 05/12/2014 14:02:00

Hi Rickert, heel erg bedankt voor je reactie. Ik ben op de hoogte van de active-record binnen CI, maar heb (eenvoudige) queries op deze manier leren maken. Voor mij is het handiger omdat ik niet alleen met CI werk.



Aha kijk dat veranderd de zaak. Bij Active Record worden alle waardes namelijk ook meteen "ge-escaped", mysql_injection.
Ik denk dat iedereen ze queries zelf leert schrijven en dat is zeker een goede manier om het te leren.

Mocht er binnen een framework zijn om het anders dan handmatig te doen zou ik het zeer aanraden. Het is niet voor niets ontwikkeld.

Belangrijkste voor nu is.. dat het gewoon werkt en dat je het begrijpt, toch?
Voor andere CI gerelateerde vragen kan je ze stellen, ik werk er al meer als 2 jaar mee en hier op PHPhulp hebben ze er niet veel kennis van. Heb zelf ook weleens een vraag gesteld en toen konden ze me ook helaas niet helpen.

Success verder met ontwikkelen.
Ik heb de query van Ger gebruikt en deze werkt perfect.

Voor overige knoop ik het goed in mijn "order" ;-) fijn weekend

[size=xsmall]Toevoeging op 05/12/2014 14:23:11:[/size]

Ehh Oren
Rickert Bombaklats op 05/12/2014 13:55:07

@jennifer Waarom gebruik je in CodeIgniter geen querybuilder (active-record)
Je kan op deze manier gemakkelijker een query bouwen.


<?php
$this->db->get_where('rooms', array('id' => 1));
$this->db->join('images', 'images.id = room.id');
$result = $this->db->get();
?>


Het is maar wat je makkelijk vind, je voert nu 2 queries uit ....

Ik gebruik Active Record niet of nauwelijks, ik vind het te omslachtig en heb een vrij aardige querybuilder in mijn hoofd zitten ;-)

Reageren