Diskuze: SELECT DISTINCT z vice sloupcu
V předchozím kvízu, Online test znalostí SQL a databází, jsme si ověřili nabyté zkušenosti z kurzu.

Člen

Zobrazeno 10 zpráv z 10.
V předchozím kvízu, Online test znalostí SQL a databází, jsme si ověřili nabyté zkušenosti z kurzu.
SELECT DISTINCT * FROM (Tvůj původní dotaz)
Jinak tohle zavani špatným návrhem. Dal bych jen sloupce jméno a příjmení a k tomu další atribut - typ.
Takže takto?
$sqlCommand = "SELECT DISTINCT * FROM (SELECT DISTINCT prijmeni1, jmeno1, concat(prijmeni1,' ',jmeno1) FROM tabulka WHERE concat(prijmeni1,' ',jmeno1)
LIKE '$pismenko%') UNION (SELECT DISTINCT prijmeni2, jmeno2, concat(prijmeni2,' ',jmeno2) FROM tabulka WHERE concat
(prijmeni2,' ',jmeno2) LIKE '$pismenko%') UNION (SELECT DISTINCT prijmeni3, jmeno3, concat(prijmeni3,' ',jmeno3) FROM tabulka
WHERE concat(prijmeni3,' ',jmeno3) LIKE '$pismenko%'))";
pak mi to vypise hlasku
Warning: mysql_fetch_row(): supplied argument is not a valid MySQL result resource in
Tím dalším atributem je co myšleno?
Pak jsem ještě zkusila dát AS
$sqlCommand = "SELECT DISTINCT * FROM (SELECT DISTINCT prijmeni1, jmeno1, concat(prijmeni1,' ',jmeno1) AS nazev FROM tabulka WHERE concat(prijmeni1,' ',jmeno1)
LIKE '$pismenko%') UNION (SELECT DISTINCT prijmeni2, jmeno2, concat(prijmeni2,' ',jmeno2) AS nazev FROM tabulka WHERE concat
(prijmeni2,' ',jmeno2) LIKE '$pismenko%') UNION (SELECT DISTINCT prijmeni3, jmeno3, concat(prijmeni3,' ',jmeno3) AS nazev FROM tabulka
WHERE concat(prijmeni3,' ',jmeno3) LIKE '$pismenko%'))";
Pro výpis:
while (list($nazev) = mysql_fetch_row($navrat)){
echo ("$nazev</br>");
}
Tak to vypisuje pořád stejnou hlášku.
Takze chces naspat jmeno a prijmeni.
zaroven Meno alebo priezvisko musia zacinat pismenom $pismenko
A nechces tam mat duplicity.
Skus toto
$sql = "
select jmeno1 as jmeno, prijmeni1 as prijmeni FROM tabulka
WHERE jmeno1 LIKE '$pismenko%' OR prijmeni1 LIKE '$pismenko%'
GROUP BY (SELECT concat(jmeno1, ' ', prijmeni1))
UNION
select jmeno2 as jmeno, prijmeni2 as prijmeni FROM tabulka
WHERE jmeno2 LIKE '$pismenko%' OR prijmeni2 LIKE '$pismenko%'
GROUP BY (SELECT concat(jmeno2, ' ', prijmeni2))
UNION
select jmeno3 as jmeno, prijmeni3 as prijmeni FROM tabulka
WHERE jmeno3 LIKE '$pismenko%' OR prijmeni3 LIKE '$pismenko%'
GROUP BY (SELECT concat(jmeno3, ' ', prijmeni3))
";
Smysl je takový, že se klikne na určité pismenko, na základě kterého vyjednou např. všechna příjmení začínající na A bez duplicit vč. jejich jména.
Zřejmě budu mít ještě někde nějakou chybu, neboť mi to vypisuje:
mysql_fetch_row(): supplied argument is not a valid MySQL result resource in
Složení je takové:
if(!empty($_SERVER['QUERY_STRING'])) {
switch ($_SERVER['QUERY_STRING'])
{
case ($_SERVER['QUERY_STRING']):
$pismenko = $_SERVER['QUERY_STRING'];
break;
}
$spojeni=mysql_connect(......);
$co = "
select jmeno1 as jmeno, prijmeni1 as prijmeni FROM tabulka
WHERE jmeno1 LIKE '$pismenko%' OR prijmeni1 LIKE '$pismenko%'
GROUP BY (SELECT concat(jmeno1, ' ', prijmeni1))
UNION
select jmeno2 as jmeno, prijmeni2 as prijmeni FROM tabulka
WHERE jmeno2 LIKE '$pismenko%' OR prijmeni2 LIKE '$pismenko%'
GROUP BY (SELECT concat(jmeno2, ' ', prijmeni2))
UNION
select jmeno3 as jmeno, prijmeni3 as prijmeni FROM tabulka
WHERE jmeno3 LIKE '$pismenko%' OR prijmeni3 LIKE '$pismenko%'
GROUP BY (SELECT concat(jmeno, ' ', prijmeni3))
";
$navrat=mysql_db_query(.....);
while (list($jmeno, $prijmeni) = mysql_fetch_row($navrat)){
echo ("$jmeno $prijmeni</br>");
}
}
Případně existuje nějaký jiný zápis pro výpis?
wau, to mysql_db_query mas odkial? Vsak to je stara funkcia
ako Lenin. Uz od verzie 5.3 sa neodporuca pouzivat. Precitaj si nieco o PDO
kniznici ale iste si najdi nieco ine na SQL.
Ten koniec by som dobojoval asi takto:
// vykonaj sql prikaz
$navrat = mysql_query($co, $spojeni);
// ak je problem s sql tak daj vediet aky.
if ($navrat === false) {
echo mysql_error();
}
// cyklus na vypis
while ($riadok = mysql_fetch_assoc($navrat)) {
echo $riadok['jmeno']." ".$riadok['prijmeni'];
}
Daj vediet ci pomohlo, alebo mas dalsi error. A tiez odkial mas to mysql_db_query?
Tak se mi podařilo dopátrat se, co znamela chybová hláška a měla jsem překlep v názvu tabulky. Tvůj kód mi už vypisuje, co potřebuji, a ještě se snažím do něj napasovat, aby mi výsledky řadil podle abecedy.
Tzn.:
Horak Adam
Horak Jiri
Kraj Jiri
Kopr Emil
Kopr Zdenek
.... atd.
Zkoušela jsem různé varianty ODER BY co mě napadly, ale žádná se mi nepodařila rozchodit.
Nyní používám:
$sql = "
select jmeno1 as jmeno, prijmeni1 as prijmeni FROM tabulka
WHERE prijmeni1 LIKE '$pismenko%'
GROUP BY (SELECT concat(prijmeni1, ' ', jmeno1))
UNION
select jmeno2 as jmeno, prijmeni2 as prijmeni FROM tabulka
WHERE prijmeni2 LIKE '$pismenko%'
GROUP BY (SELECT concat(prijmeni2, ' ', jmeno2))
UNION
select jmeno3 as jmeno, prijmeni3 as prijmeni FROM tabulka
WHERE prijmeni3 LIKE '$pismenko%'
GROUP BY (SELECT concat(prijmeni3, ' ', jmeno3))
";
Tak se mi už podařilo to řazení tam dostat, měla jsem překlep v předpisu.
Ještě bych měla dotaz vztahující se k výpisu
echo ("$jmeno $prijmeni</br>");
Jak by se měl výpis doplnit, aby při vypsaném jménu a příjmení bylo možné na něj kliknout a provedl se dotaz výpis z databáze na všechny položky obsahující toto jméno a příjmení?
netuším, jakým způsobem máš jednotlivé záznamy, ale předpokládám, že na to půjdeš nějak takhle:
1. rozšířit výpis názvu o aktivní odkaz (a)
echo ("<a href=\"vypis.php?jp='.$jmeno $prijmeni.'\">'.$jmeno $prijmeni.'</br>");
kdyžtak si uprav nějak pořadí uvozovek složených a jednoduchých, aby
Ti to nevypisovalo chybu, tomuto já neholduju
2. sestavit si SQL dotaz, co a jak budeš chtít vypisovat, je hlavní si uvědomit, že budeš pracovat s proměnnýma $jmeno $prijmeni, takže na ty se budeš v dotazu odvolávat a budou v podmínce, takže to bude něco jako
WHERE jmeno1 LIKE '$jmeno' AND prijmeni1 LIKE '$prijmeni'
...
3. pak ještě si vytvoříš předávání parametru:
if (isset($_GET['jp']))
v tomto případě jp, nebo jak si to pojmenuješ je na Tobě, u toho budeš testovat, pokud byl předaný, jako že ano bude tak do něj právě uložíš ty proměnné $jmeno a $prijmeni, které se budou odvolávat do SQL dotazu, aby Ti to vypsalo to, co potřebuješ
Tak zkus tvořit, je to nástin postupu a následně budeme dolaďovat
úpravy dle konkrétních požadavků
Zobrazeno 10 zpráv z 10.