Autor Zpráva
quatzael
Profil
Lze nějak jednoduše už v SQL příkazu vyselektovat jen hodnoty, které nejsou NULL?

pomocí příkazu SELECT * se mi vyselektuje jeden řádek. Ale docela by se mi hodilo, aby potom následně pomocí příkazu mysqli_fetch_array() se mi do pole nedostaly NULL hodnoty (ze sloupců s NULL)..

Dalo by se to určitě ošetřit následně v PHPku, ale zajímalo by mě jestli není nějaké elegantnější řešení přímo v SQL..
Taps
Profil
quatzael:
SELECT * FROM TABULKA WHERE SLOUPEC IS NOT NULL
Kajman
Profil
quatzael:
ale zajímalo by mě jestli není nějaké elegantnější řešení přímo v SQL

Ne.
quatzael
Profil
Taps:
Asi jsem to popsal nepřesně. Ja nemám na myslí select řádku podle to jestli je v jednom konkrétním sloupci NULL nebo ne..
Ja mám na myslí příkaz select který mi z jednoho řádku, který si určím jednoznačně vybere jen ty sloupce, které nebudou mít hodnotu NULL. Takže spíš v tom příkazu bude něco místo toho asterisku..
Kcko
Profil
quatzael:
Nic takového není. V PHP si na to můžeš, napsat vlastní funkci.
Tori
Profil
quatzael:
Je logické, že to nejde - pak by vám přece mohl vyjít v každém řádku jiný počet sloupců, nebo by byly ve stejném sloupci hodnoty různých (a nekompatibilních) dat. typů.
Joker
Profil
quatzael:
Ja mám na myslí příkaz select který mi z jednoho řádku, který si určím jednoznačně vybere jen ty sloupce, které nebudou mít hodnotu NULL.
Dotaz: Proč?
Nějak si neumím představit k čemu by to mohlo být dobré.
Protože:
- Buď vím předem které sloupce chci a pak je nejsnazší ty ostatní prostě nezahrnout do dotazu.
- Nebo nevím které budou NULL, jenže pak zas nelze předem říct, hodnoty jakých sloupců vlastně ten dotaz vrátí. Jak s tím má aplikace pracovat? By musela kontrolovat, jestli sloupce které chce ve výsledku jsou nebo nejsou, což už tam může rovnou být kontrola na NULL.

Jestli databázová tabulka obsahuje rozsáhlý výčet sloupců, většina z nich je NULL a aplikace nedokáže říct které z nich vlastně chce, dost možná za tím bude chybný návrh databáze.
quatzael
Profil
Tori:
Je logické, že to nejde - pak by vám přece mohl vyjít v každém řádku jiný počet sloupců, nebo by byly ve stejném sloupci hodnoty různých (a nekompatibilních) dat. typů.
1. mám tam takovou selekci, že mi vyjede opravdu jen jeden řádek
2. to, že tam bude pokaždé jiný počet slopců přece nehraje žádnou roli. mysqli_fetch_array() vyhodí asociativní pole, a pomocí foreach si zpracuju jen ty proměnný, který mají nějakou hodnotu.. (fyi, přepošlu ajaxem jako json do javasriptu a odtamtud uložím jako session proměnný.

Joker:
Jedná se o načtení dat z profilu do formuláře. Uživatel, který už bude na stránkách zaregistrovaný si může předvyplnit nějaké údaje, sloužící k objednávání produktů, a když si předvyplní pouze polovinu z nich a při vyplňování formuláře klikne na tlačítko pro načtení dat z profilu, tak chci aby se mu vyplnily/přepsaly pouze ty položky, které ve svém profilu vyplněné má. To znamená, když už začne něco v objednávkovém formuláři vyplňovat a napadne ho kliknout na tlačítko "načíst údaje z profilu" tak aby se mu vyplnily/přepsaly jen ty inputy, u kterých v profilu má zadané nějaké hodnoty a aby se mu tedy nesmazaly vyplněné inputy a nepřepsaly prázdnými kolonkami..


Jinak by mě zajímalo do jaké míry se dá spolehnout na podmínku v PHP pro hodnotu null získanou z té tabulky z databáze?

$onerow = mysqli_fetch_array($result);
if ($onerow ['item_1'] != null)
aDAm
Profil
quatzael:
Do takové míry jaký je pro daný sloupec zvolen datový typ.

Jinak řešíš to nesmyslně. Když si to ajaxem jakoby vyplňuješ tak proč ci prostě nepošleš korektní kolekci dat která bude vždy stejná pro každého uživatele jen ty prvky co jsou null budeš přeskakovat? Proměnlivé tabulky není zrovna moc čisté řešení.
Tori
Profil
quatzael:
mysqli_fetch_array() vyhodí asociativní pole, a pomocí foreach si zpracuju jen ty proměnný, který mají nějakou hodnotu
... a při tom můžete ty NULLové snadno zahazovat. Případně:
$row = mysql_fetch_assoc($result);
$notNullValues = array_filter($row, function($value) { return !is_null($value); });
// $notEmptyValues = array_filter($row, 'strlen'); -- vyhodí kromě NULL i prázdný řetězec
Na podmínku se IMHO spolehnout dá, ale musíte použít správný operátor: !==
Anebo můžete neprázdnost kontrolovat až v JavaScriptu.
quatzael
Profil
aDAm:
Proměnlivé tabulky není zrovna moc čisté řešení.
Jaký proměnlivý tabulky? Já nevím jestli to pořád vysvětluju špatně.. Tabulka je jedna, počet sloupců je pevně daný. Jen jsem chtěl to, aby když si uživatel ze svého profilu uloží do té tabulky nějaká data (tzn. vyplní třeba jen několi slopců a znytek nechá prázdný), aby se ty prázdné vyplnily hodnotou NULL. Protože když si bude chtít načíst tyto data do jiného objednávkového formuláře, tak aby se mu tam načetly opravdu jen ty, které si v té databázi předtím už uložil a aktuální data v rozpracovaném formuláři si mohl doplnit hodnotami uloženými v databázi bez obav z toho, že by mu to vyplnilo celý formulář prázdnými buňkami..
Moderátor jenikkozak: Za větou se píše jen jedna tečka.
quatzael
Profil
Tori:
No tak když to SQL neumí samo vyfiltrovat, tak ani nemá cenu tam nějaké NULL jako výchozí hodnotu zadávat a vyfiltruju to jen tak, že nebudu brát v úvahu prázdné řetězce..
juriad
Profil
Pozor na to, že NULL a prázdný řetězec má jiný význam (v MySQL, v Oracle je to to samé).
Příklad: pokud bys měl obec bez uličního systému a zvlášt pole pro číslo popisné, tak zadání prázdné ulice je v pořádku a značí, že obec uliční systém nemá. Hodnota NULL v poli ulice naopak značí, že ulice je neznámá, neexistuje o ní žádná informace (ani ta, která vyvrací její existenci).


Viz poslení přiklad na webu czso.
quatzael
Profil
juriad:
Jojo, tohle chápu..

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm:

0