Portál AbcLinuxu, 2. června 2024 15:16


Dotaz: Select jehoz vysledkem bude vicerozmerne pole

24.4.2022 16:57 Petr
Select jehoz vysledkem bude vicerozmerne pole
Přečteno: 1272×
Odpovědět | Admin
Ahoj,

lamu si hlavu nad timto:

Mam tabulky Osoby, Telefony, Osoby_Telefony

A potreboval bych udelat SELECT, ktery mi seskupi osoby se stejnym telefonnim cislem, a z nehoz mi "mysqli_fetch_assoc" udela neco takoveho:
[telefony] => Array
    (
        [0] => Array
            (
                [telefonni_cislo] => 111222333
                [osoby] => Array
                    (
                        [0] => Array
                            (
                                [id] => 1
                                [jmeno_osoby] => Franta Koudelka
                            )
                        [1] => Array
                            (
                                [id] => 2
                                [jmeno_osoby] => Inzenyr Kralik
                            )
                    )

            )
    )
Nemusi to mit presne tuhle podobu. Ale potrebuji, abych pod jednim zaznamem z tabulky Telefony, mel vsechny Osoby, ktere maji tento telefon.

Moje hokus/pokusy selhavaji.

Dekuji

Řešení dotazu:


Nástroje: Začni sledovat (0) ?Zašle upozornění na váš email při vložení nového komentáře.

Odpovědi

24.4.2022 17:42 z_sk | skóre: 34 | blog: analyzy
Rozbalit Rozbalit vše Re: Select jehoz vysledkem bude vicerozmerne pole
Odpovědět | | Sbalit | Link | Blokovat | Admin
Lebo asi sa to nejak rozumne a komfortne v SQL asi nedá. Máš vystúp v SQL, čo sú dáta v tabuľkách, a výstup chceš typovo niečo ako JSON.:

<?php

$lines=array();
$lines[0][0]="123456789";
$lines[0][1]="Meno";

$lines[1][0]="123456789";
$lines[1][1]="Meno2";

$lines[2][0]="123456789";
$lines[2][1]="Meno3";

$lines[3][0]="11000";
$lines[3][1]="Meno4";

$data=array();
foreach($lines as $record)
{
	$phone=$record[0];
	$nick=$record[1];

	if(isset($data["$phone"]))
		array_push($data["$phone"], "$nick");
	else
		$data["$phone"]=array("$nick");
}

foreach($data as $phone => $nicks)
{
	echo "'$phone'\n";
	foreach($nicks as $nick)
		echo "\t$nick\n";
}
Výstup:
'123456789'
	Meno
	Meno2
	Meno3
'11000'
	Meno4
debian.plus@protonmail.com
24.4.2022 18:15 Petr
Rozbalit Rozbalit vše Re: Select jehoz vysledkem bude vicerozmerne pole
Mate pravdu, ted jsem se na stackoverflow docetl, ze:

MySQL cannot show anything beside "rows". It can make anything you can describe as a row, but it cannot do rows within rows - it simply can't.

Takze to budu muset opravdu resit pres PHP.

Diky
AraxoN avatar 29.4.2022 09:59 AraxoN | skóre: 47 | blog: slon_v_porcelane | Košice
Rozbalit Rozbalit vše Re: Select jehoz vysledkem bude vicerozmerne pole
Cez GROUP_CONCAT() by to asi šlo nejak znásilniť, ale spraviť to až v PHP je aj tak asi lepšie.
27.4.2022 14:10 z_sk | skóre: 34 | blog: analyzy
Rozbalit Rozbalit vše Re: Select jehoz vysledkem bude vicerozmerne pole
Oprava:
 if(in_array("$phone", $data)) #riadok 22
debian.plus@protonmail.com

Založit nové vláknoNahoru

Tiskni Sdílej: Linkuj Jaggni to Vybrali.sme.sk Google Del.icio.us Facebook

ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.