PHP/MySQL Hämta varannan rad!

Permalänk
Medlem

PHP/MySQL Hämta varannan rad!

Hej Swec!

Jag har kört fast lite i slutfasen av hemsidan, det är så att jag vill bara hämta varannat inlägg ifrån databasen.

Prövade att skriva
Se while($row = mysql_fetch_array($resul1), STEP 2)

$resul1 = mysql_query("SELECT * FROM `Nyheter` ORDER BY `ID` DESC LIMIT 0, 30") or die(mysql_error()); while($row = mysql_fetch_array($resul1), STEP 2) { echo "<div class='home_entry'>"; echo "<h2>" . $row['Titel'] . "</h2>"; echo "<p>" . mb_substr($row['Text'], 0, 340) . "...</p>"; echo "<p><a href='nyheter.php?ID=" . $row['ID'] . "' title=''>Läs mer...</a></p>"; echo "</div>"; } ?>

och
Se mysql_query("SELECT * FROM `Nyheter` ORDER BY `ID` DESC LIMIT 0, 30 STEP 2") or die(mysql_error());

$resul1 = mysql_query("SELECT * FROM `Nyheter` ORDER BY `ID` DESC LIMIT 0, 30 STEP 2") or die(mysql_error()); while($row = mysql_fetch_array($resul1)) { echo "<div class='home_entry'>"; echo "<h2>" . $row['Titel'] . "</h2>"; echo "<p>" . mb_substr($row['Text'], 0, 340) . "...</p>"; echo "<p><a href='nyheter.php?ID=" . $row['ID'] . "' title=''>Läs mer...</a></p>"; echo "</div>"; } ?>

Men inget av det vill fungera, någon som har nå tips?

Visa signatur

~. Citera så jag hittar tillbaka .~

Permalänk
Medlem

Tror Modulus kan vara lösningen du letar efter.

$i=0; while($row = mysql_fetch_array($resul1)) { $i+=1; if($i%2) continue; // avbryter nuvarande loop och börjar nästa. echo "Gör dina saker här..."; }

Modulus fungera såhär:
10%2 = 0 (eftersom 2 går i 10 5 ggr och genererar ingen rest)
11%2 = 1 (eftersom 2 går i 11 5 ggr och genererar 1 i rest)
12%2 = 0 (eftersom 2 går i 12 6 ggr och genererar ingen rest)

På detta viset fungerar modulus 2 (%2) som varannan %3 var tredje osv ...

P.S.
Ser kanske bättre ut som en for-loop

for ($i = 0; $row = mysql_fetch_array($resul1); $i++) { if($i%2) continue; // avbryter nuvarande loop och börjar nästa. echo "Gör dina saker här..."; }

Visa signatur

There are 10 types of people in the world: Those who understand binary, and those who don't...

Asus Maximus VIII Hero | i7-6700K | ASUS GeForce GTX1070 Strix 8GB | G.Skill F4-2133C15Q-32GRK |

Permalänk
Medlem

Tack för svaret!
Men hur får jag in det i min MySQL förfrågan då? :/

Visa signatur

~. Citera så jag hittar tillbaka .~

Permalänk
Medlem

Nvm, Löste det ^^, Studerade inte din första kod ordentligt!
Super tack ;D

Visa signatur

~. Citera så jag hittar tillbaka .~

Permalänk
Testpilot

Lite nyfiken bara, varför ska du bara ha varannan rad? låter som en väldigt konstig lösning enligt mig
Vad innehåller de raderna du inte vill ha med? är varannan nyhet värdelös? låter som att en helt annan lösning på själva lagringen är att föredra.

Problemet med WarWolf.667's lösning är även att den hämtar alla rader och lagrar de i minnet trots att varannan sen inte används, kanske inte ett jätteproblem men inte heller optimalt.

Visa signatur

Kolla gärna in min RGB-LED-ljusstake i galleriet
[Gigabyte GA-Z97MX-Gaming 5][Intel Core i5 4690K][Corsair XMS3 16GB][Asus GeForce RTX 2060 Super Dual Evo OC]

Permalänk
Medlem

Har 2 kolummer som nyhterna går i.
Vill ha så att de går i
Nyhet1 Nyhet2
Nyhet3 Nyhet4

Istället för
Nyhet1 Nyhet3
Nyhet2 Nyhet4

Visa signatur

~. Citera så jag hittar tillbaka .~

Permalänk
Medlem

Då kan du göra detta

for ($i = 0; $row = mysql_fetch_array($resul1); $i++) { if($i%2) { echo "<tr><td>col1 data</td>"; } else { echo "<td>col2 data</td></tr>"; } }

eller något liknande.

Visa signatur

There are 10 types of people in the world: Those who understand binary, and those who don't...

Asus Maximus VIII Hero | i7-6700K | ASUS GeForce GTX1070 Strix 8GB | G.Skill F4-2133C15Q-32GRK |

Permalänk
Medlem

Prövar det på en gång, återkommer om 2 min (:

Visa signatur

~. Citera så jag hittar tillbaka .~

Permalänk
Medlem

Ingen framgång,
Måste ha

echo "</diV>"; echo "<div class='home_center'>";

mellan looparna :/ Finns det någon smidig lösning på det här?

Visa signatur

~. Citera så jag hittar tillbaka .~

Permalänk
Medlem

Får tacka för all hjälp, kommer förmodligen skriva igen om något annat problem jag stöter på ^^,

Visa signatur

~. Citera så jag hittar tillbaka .~

Permalänk
Hedersmedlem

Först svar på originalfrågan, sedan svar på vad som borde varit frågan

  1. För att välja var 1337:e rad (byt ut mot önskad siffra, i ditt fall 2. 1337 användes för klarhet i kod) ur tabellen `mitttabellnamn` och där läsa kolumnen `denkolumnjagvillha` så körs t ex

  2. Så som ditt anrop från tråden ser ut så plockas all data ut, sedan används bara hälften. En dålig lösning är att göra ett anrop för varje rad som hämtas. Ovanstående lösning plockar bara ut just varannan rad. Beroende på vad som begränsar applikationen (RAM, CPU, accesshastighet, …) så kan det vara bättre/sämre än att plocka all data och därefter sålla. I detta fallet antar jag att inget egentligen begränsar.

  3. Som påpekas så är det inte vad du vill göra i detta fallet. Du vill plocka ut alla nyheter (är rätt exotiska situationer där man skulle vilja ha ut var sjunde rad el dyl) och sedan presentera dem på ett visst sätt, vilket du får sköta i HTML medelst PHP. Jobba med modulo så löser du det.

Visa signatur

Nu med kortare användarnamn, men fortfarande bedövande långa inlägg.

Permalänk
Legendarisk
Skrivet av 19KeVVa93:

Ingen framgång,
Måste ha

echo "</diV>"; echo "<div class='home_center'>";

mellan looparna :/ Finns det någon smidig lösning på det här?

Annat alternativ för att svara på frågan i topic:

SET @rownum := 0; SELECT [columns] FROM [table] HAVING MOD(@rownum := @rownum + 1, 2) = 1;

Som flera andra har påpekat är det dock inte vad du behöver här, du vill bara hämta datan en gång. Det är lite oklart hur du vill att markupen ska se ut på slutet men du kan ju alltid skriva ut till två olika mallar, en per kolumn, som du sedan sammanfogar när du är klar.

Visa signatur

Abstractions all the way down.

Permalänk
Medlem

Så vitt jag förstod skulle data skrivas ut i två kolumner, dvs att all data skall användas så det finns ju ingen anledning att göra några andra anrop till databasen är den som gjorts...

Visa signatur

There are 10 types of people in the world: Those who understand binary, and those who don't...

Asus Maximus VIII Hero | i7-6700K | ASUS GeForce GTX1070 Strix 8GB | G.Skill F4-2133C15Q-32GRK |